mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 14:41:24 +08:00
152 lines
4.5 KiB
Plaintext
152 lines
4.5 KiB
Plaintext
;Inspired by:
|
|
; https://gist.github.com/bogdibota/062919938e1ed388b3db5ea31f52955c
|
|
; https://stackoverflow.com/questions/34177547/detect-if-visual-c-redistributable-for-visual-studio-2013-is-installed
|
|
; https://stackoverflow.com/a/54391388
|
|
; https://github.com/GitCommons/cpp-redist-nsis/blob/main/installer.nsh
|
|
|
|
;Find latests downloads here:
|
|
; https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
|
|
|
|
!include LogicLib.nsh
|
|
!include x64.nsh
|
|
|
|
; https://github.com/electron-userland/electron-builder/issues/1122
|
|
!ifndef BUILD_UNINSTALLER
|
|
; Check VC++ Redistributable based on architecture stored in $1
|
|
Function checkVCRedist
|
|
${If} $1 == "arm64"
|
|
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\ARM64" "Installed"
|
|
${Else}
|
|
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64" "Installed"
|
|
${EndIf}
|
|
FunctionEnd
|
|
|
|
Function checkArchitectureCompatibility
|
|
; Initialize variables
|
|
StrCpy $0 "0" ; Default to incompatible
|
|
StrCpy $1 "" ; System architecture
|
|
StrCpy $3 "" ; App architecture
|
|
|
|
; Check system architecture using built-in NSIS functions
|
|
${If} ${RunningX64}
|
|
; Check if it's ARM64 by looking at processor architecture
|
|
ReadEnvStr $2 "PROCESSOR_ARCHITECTURE"
|
|
ReadEnvStr $4 "PROCESSOR_ARCHITEW6432"
|
|
|
|
${If} $2 == "ARM64"
|
|
${OrIf} $4 == "ARM64"
|
|
StrCpy $1 "arm64"
|
|
${Else}
|
|
StrCpy $1 "x64"
|
|
${EndIf}
|
|
${Else}
|
|
StrCpy $1 "x86"
|
|
${EndIf}
|
|
|
|
; Determine app architecture based on build variables
|
|
!ifdef APP_ARM64_NAME
|
|
!ifndef APP_64_NAME
|
|
StrCpy $3 "arm64" ; App is ARM64 only
|
|
!endif
|
|
!endif
|
|
!ifdef APP_64_NAME
|
|
!ifndef APP_ARM64_NAME
|
|
StrCpy $3 "x64" ; App is x64 only
|
|
!endif
|
|
!endif
|
|
!ifdef APP_64_NAME
|
|
!ifdef APP_ARM64_NAME
|
|
StrCpy $3 "universal" ; Both architectures available
|
|
!endif
|
|
!endif
|
|
|
|
; If no architecture variables are defined, assume x64
|
|
${If} $3 == ""
|
|
StrCpy $3 "x64"
|
|
${EndIf}
|
|
|
|
; Compare system and app architectures
|
|
${If} $3 == "universal"
|
|
; Universal build, compatible with all architectures
|
|
StrCpy $0 "1"
|
|
${ElseIf} $1 == $3
|
|
; Architectures match
|
|
StrCpy $0 "1"
|
|
${Else}
|
|
; Architectures don't match
|
|
StrCpy $0 "0"
|
|
${EndIf}
|
|
FunctionEnd
|
|
!endif
|
|
|
|
!macro customInit
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
Push $3
|
|
Push $4
|
|
|
|
; Check architecture compatibility first
|
|
Call checkArchitectureCompatibility
|
|
${If} $0 != "1"
|
|
MessageBox MB_ICONEXCLAMATION "\
|
|
Architecture Mismatch$\r$\n$\r$\n\
|
|
This installer is not compatible with your system architecture.$\r$\n\
|
|
Your system: $1$\r$\n\
|
|
App architecture: $3$\r$\n$\r$\n\
|
|
Please download the correct version from:$\r$\n\
|
|
https://www.cherry-ai.com/"
|
|
ExecShell "open" "https://www.cherry-ai.com/"
|
|
Abort
|
|
${EndIf}
|
|
|
|
Call checkVCRedist
|
|
${If} $0 != "1"
|
|
; VC++ is required - install automatically since declining would abort anyway
|
|
; Select download URL based on system architecture (stored in $1)
|
|
${If} $1 == "arm64"
|
|
StrCpy $2 "https://aka.ms/vs/17/release/vc_redist.arm64.exe"
|
|
StrCpy $3 "$TEMP\vc_redist.arm64.exe"
|
|
${Else}
|
|
StrCpy $2 "https://aka.ms/vs/17/release/vc_redist.x64.exe"
|
|
StrCpy $3 "$TEMP\vc_redist.x64.exe"
|
|
${EndIf}
|
|
|
|
inetc::get /CAPTION " " /BANNER "Downloading Microsoft Visual C++ Redistributable..." \
|
|
$2 $3 /END
|
|
Pop $0 ; Get download status from inetc::get
|
|
${If} $0 != "OK"
|
|
MessageBox MB_ICONSTOP|MB_YESNO "\
|
|
Failed to download Microsoft Visual C++ Redistributable.$\r$\n$\r$\n\
|
|
Error: $0$\r$\n$\r$\n\
|
|
Would you like to open the download page in your browser?$\r$\n\
|
|
$2" IDYES openDownloadUrl IDNO skipDownloadUrl
|
|
openDownloadUrl:
|
|
ExecShell "open" $2
|
|
skipDownloadUrl:
|
|
Abort
|
|
${EndIf}
|
|
|
|
ExecWait "$3 /install /quiet /norestart"
|
|
; Note: vc_redist exit code is unreliable, verify via registry check instead
|
|
|
|
Call checkVCRedist
|
|
${If} $0 != "1"
|
|
MessageBox MB_ICONSTOP|MB_YESNO "\
|
|
Microsoft Visual C++ Redistributable installation failed.$\r$\n$\r$\n\
|
|
Would you like to open the download page in your browser?$\r$\n\
|
|
$2$\r$\n$\r$\n\
|
|
The installation of ${PRODUCT_NAME} cannot continue." IDYES openInstallUrl IDNO skipInstallUrl
|
|
openInstallUrl:
|
|
ExecShell "open" $2
|
|
skipInstallUrl:
|
|
Abort
|
|
${EndIf}
|
|
${EndIf}
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
!macroend
|