installer.nsi 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. !include "MUI2.nsh"
  2. !include "FileFunc.nsh"
  3. !include "LogicLib.nsh"
  4. !define PRODUCT_NAME "steamSH"
  5. !define PRODUCT_VERSION "0.1.0"
  6. !define PRODUCT_PUBLISHER "steamSH"
  7. !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\steamSH.exe"
  8. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  9. !define PRODUCT_UNINST_ROOT_KEY "HKLM"
  10. ; 相对路径:Tauri 会把本脚本复制到 target/**/release/nsis/x64/ 下执行
  11. !define MUI_ICON "..\..\..\..\icons\icon.ico"
  12. !define MUI_UNICON "..\..\..\..\icons\icon.ico"
  13. !define MUI_ABORTWARNING
  14. !insertmacro MUI_PAGE_WELCOME
  15. !insertmacro MUI_PAGE_LICENSE "..\..\..\..\license.txt"
  16. !insertmacro MUI_PAGE_DIRECTORY
  17. !insertmacro MUI_PAGE_INSTFILES
  18. !insertmacro MUI_UNPAGE_CONFIRM
  19. !insertmacro MUI_UNPAGE_INSTFILES
  20. !insertmacro MUI_LANGUAGE "SimpChinese"
  21. !insertmacro MUI_LANGUAGE "English"
  22. ; Check if WebView2 runtime is installed
  23. Function CheckWebView2
  24. ReadRegStr $0 SHCTX "SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv"
  25. ${If} $0 != ""
  26. StrCpy $R9 "1"
  27. Return
  28. ${EndIf}
  29. ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv"
  30. ${If} $0 != ""
  31. StrCpy $R9 "1"
  32. Return
  33. ${EndIf}
  34. ReadRegStr $0 SHCTX "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv"
  35. ${If} $0 != ""
  36. StrCpy $R9 "1"
  37. Return
  38. ${EndIf}
  39. StrCpy $R9 "0"
  40. FunctionEnd
  41. ; Write temp PowerShell script to download and install WebView2
  42. Function InstallWebView2
  43. DetailPrint "Checking WebView2 runtime..."
  44. Call CheckWebView2
  45. ${If} $R9 == "1"
  46. DetailPrint "WebView2 already installed. Skipping."
  47. Return
  48. ${EndIf}
  49. DetailPrint "WebView2 not found. Downloading..."
  50. StrCpy $R8 "$TEMP\steamSH_wv2.ps1"
  51. FileOpen $R7 $R8 w
  52. StrCpy $R6 "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12`n"
  53. FileWrite $R7 $R6
  54. StrCpy $R6 "$$dest=$$env:TEMP+'\MicrosoftEdgeWebview2Setup.exe'`n"
  55. FileWrite $R7 $R6
  56. StrCpy $R6 "$$url='https://go.microsoft.com/fwlink/p/?LinkId=2124703'`n"
  57. FileWrite $R7 $R6
  58. StrCpy $R6 "try {`n"
  59. FileWrite $R7 $R6
  60. StrCpy $R6 " Invoke-WebRequest -Uri $$url -OutFile $$dest -UseBasicParsing -TimeoutSec 120`n"
  61. FileWrite $R7 $R6
  62. StrCpy $R6 " Start-Process -FilePath $$dest -ArgumentList '/silent','/closeProjects','/doNotLaunch' -Wait`n"
  63. FileWrite $R7 $R6
  64. StrCpy $R6 "} catch { exit 1 }`n"
  65. FileWrite $R7 $R6
  66. StrCpy $R6 "Remove-Item $$dest -Force -EA SilentlyContinue`n"
  67. FileWrite $R7 $R6
  68. StrCpy $R6 "exit 0"
  69. FileWrite $R7 $R6
  70. FileClose $R7
  71. ExecWait 'powershell -NoProfile -ExecutionPolicy Bypass -File "$R8"' $R9
  72. Delete $R8
  73. ${If} $R9 == "0"
  74. DetailPrint "WebView2 installed successfully."
  75. ${Else}
  76. DetailPrint "WebView2 install failed (code: $R9)."
  77. DetailPrint "Manual install: https://developer.microsoft.com/en-us/microsoft-edge/webview2/"
  78. ${EndIf}
  79. FunctionEnd
  80. Section "MainSection" SEC01
  81. SetOutPath "$INSTDIR"
  82. SetOverwrite on
  83. ; 与主程序同目录:…/release/nsis/x64/ -> …/release/steamSH.exe
  84. File "..\..\steamSH.exe"
  85. SectionEnd
  86. Section -AdditionalIcons
  87. WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" ""
  88. CreateDirectory "$SMPROGRAMS\steamSH"
  89. CreateShortCut "$SMPROGRAMS\steamSH\Uninstall.lnk" "$INSTDIR\uninst.exe"
  90. SectionEnd
  91. Section -Post
  92. WriteUninstaller "$INSTDIR\uninst.exe"
  93. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
  94. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  95. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\steamSH.exe"
  96. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  97. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
  98. ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
  99. IntFmt $0 "0x%08X" $0
  100. WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "EstimatedSize" "$0"
  101. SectionEnd
  102. Section -WebView2
  103. Call InstallWebView2
  104. SectionEnd
  105. Section Uninstall
  106. Delete "$INSTDIR\steamSH.exe"
  107. Delete "$INSTDIR\${PRODUCT_NAME}.url"
  108. Delete "$INSTDIR\uninst.exe"
  109. Delete "$SMPROGRAMS\steamSH\Uninstall.lnk"
  110. RMDir "$SMPROGRAMS\steamSH"
  111. RMDir "$INSTDIR"
  112. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  113. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_DIR_REGKEY}"
  114. SetAutoClose true
  115. SectionEnd
  116. Function un.onInit
  117. MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name) and all its components?" IDYES +2
  118. Abort
  119. FunctionEnd