!include "MUI2.nsh" !include "FileFunc.nsh" !include "LogicLib.nsh" !define PRODUCT_NAME "steamSH" !define PRODUCT_VERSION "0.1.0" !define PRODUCT_PUBLISHER "steamSH" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\steamSH.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; 相对路径:Tauri 会把本脚本复制到 target/**/release/nsis/x64/ 下执行 !define MUI_ICON "..\..\..\..\icons\icon.ico" !define MUI_UNICON "..\..\..\..\icons\icon.ico" !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "..\..\..\..\license.txt" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "English" ; Check if WebView2 runtime is installed Function CheckWebView2 ReadRegStr $0 SHCTX "SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" ${If} $0 != "" StrCpy $R9 "1" Return ${EndIf} ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" ${If} $0 != "" StrCpy $R9 "1" Return ${EndIf} ReadRegStr $0 SHCTX "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" ${If} $0 != "" StrCpy $R9 "1" Return ${EndIf} StrCpy $R9 "0" FunctionEnd ; Write temp PowerShell script to download and install WebView2 Function InstallWebView2 DetailPrint "Checking WebView2 runtime..." Call CheckWebView2 ${If} $R9 == "1" DetailPrint "WebView2 already installed. Skipping." Return ${EndIf} DetailPrint "WebView2 not found. Downloading..." StrCpy $R8 "$TEMP\steamSH_wv2.ps1" FileOpen $R7 $R8 w StrCpy $R6 "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12`n" FileWrite $R7 $R6 StrCpy $R6 "$$dest=$$env:TEMP+'\MicrosoftEdgeWebview2Setup.exe'`n" FileWrite $R7 $R6 StrCpy $R6 "$$url='https://go.microsoft.com/fwlink/p/?LinkId=2124703'`n" FileWrite $R7 $R6 StrCpy $R6 "try {`n" FileWrite $R7 $R6 StrCpy $R6 " Invoke-WebRequest -Uri $$url -OutFile $$dest -UseBasicParsing -TimeoutSec 120`n" FileWrite $R7 $R6 StrCpy $R6 " Start-Process -FilePath $$dest -ArgumentList '/silent','/closeProjects','/doNotLaunch' -Wait`n" FileWrite $R7 $R6 StrCpy $R6 "} catch { exit 1 }`n" FileWrite $R7 $R6 StrCpy $R6 "Remove-Item $$dest -Force -EA SilentlyContinue`n" FileWrite $R7 $R6 StrCpy $R6 "exit 0" FileWrite $R7 $R6 FileClose $R7 ExecWait 'powershell -NoProfile -ExecutionPolicy Bypass -File "$R8"' $R9 Delete $R8 ${If} $R9 == "0" DetailPrint "WebView2 installed successfully." ${Else} DetailPrint "WebView2 install failed (code: $R9)." DetailPrint "Manual install: https://developer.microsoft.com/en-us/microsoft-edge/webview2/" ${EndIf} FunctionEnd Section "MainSection" SEC01 SetOutPath "$INSTDIR" SetOverwrite on ; 与主程序同目录:…/release/nsis/x64/ -> …/release/steamSH.exe File "..\..\steamSH.exe" SectionEnd Section -AdditionalIcons WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "" CreateDirectory "$SMPROGRAMS\steamSH" CreateShortCut "$SMPROGRAMS\steamSH\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\steamSH.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 IntFmt $0 "0x%08X" $0 WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "EstimatedSize" "$0" SectionEnd Section -WebView2 Call InstallWebView2 SectionEnd Section Uninstall Delete "$INSTDIR\steamSH.exe" Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$SMPROGRAMS\steamSH\Uninstall.lnk" RMDir "$SMPROGRAMS\steamSH" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name) and all its components?" IDYES +2 Abort FunctionEnd