杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1962|回复: 0

NSIS 打包一个客户端的完整示例

[复制链接]
发表于 2017-12-22 17:20:59 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生

  2. ; 安装程序初始定义常量
  3. !define PRODUCT_NAME "GloTrader"
  4. !define PRODUCT_VERSION "2.2.1"
  5. !define PRODUCT_PUBLISHER "RMMSoft"
  6. !define PRODUCT_WEB_SITE "http://www.rmmsoft.com.cn"
  7. !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\AppPaths\GloTrader.exe"
  8. !define PRODUCT_UNINST_KEY"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  9. !define PRODUCT_UNINST_ROOT_KEY "HKLM"

  10. SetCompressor /SOLID lzma
  11. SetCompressorDictSize 32

  12. ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
  13. !include "MUI.nsh"

  14. ; MUI 预定义常量
  15. !define MUI_ABORTWARNING
  16. !define MUI_ICON"${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
  17. !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"
  18. !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit

  19. ; 语言选择窗口常量设置
  20. !define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
  21. !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
  22. !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

  23. ; 欢迎页面
  24. !insertmacro MUI_PAGE_WELCOME
  25. ; 许可协议页面
  26. !define MUI_LICENSEPAGE_CHECKBOX
  27. ;!insertmacro MUI_PAGE_LICENSE "D:\BuildInstall\Client\GloTrader\src\Eula.English.rtf"
  28. LicenseLangString License 1033 "D:\BuildInstall\Client\GloTrader\src\Eula.English.rtf"
  29. LicenseLangString License 2052 "D:\BuildInstall\Client\GloTrader\src\Eula.Chinese.rtf"
  30. !insertmacro MUI_PAGE_LICENSE $(License)

  31. ; 安装目录选择页面
  32. !insertmacro MUI_PAGE_DIRECTORY
  33. ; 安装过程页面
  34. !insertmacro MUI_PAGE_INSTFILES
  35. ; 安装完成页面
  36. !define MUI_FINISHPAGE_RUN "$INSTDIR\GloTrader.exe"
  37. !insertmacro MUI_PAGE_FINISH

  38. ; 安装卸载过程页面
  39. !insertmacro MUI_UNPAGE_INSTFILES

  40. ; 安装界面包含的语言设置
  41. !insertmacro MUI_LANGUAGE "English"
  42. !insertmacro MUI_LANGUAGE "SimpChinese"

  43. ; 安装预释放文件
  44. !insertmacro MUI_RESERVEFILE_LANGDLL
  45. !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
  46. ; ------ MUI 现代界面定义结束 ------



  47. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
  48. OutFile "GloTrader_${__DATE__}.exe"
  49. InstallDir "$PROGRAMFILES\RMMSoft\GloTrader"
  50. InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}""UninstallString"
  51. ShowInstDetails show
  52. ShowUnInstDetails show
  53. BrandingText "RMMSoft www.rmmsoft.com.cn"

  54. Section "MainSection" SEC01
  55. ;RMDir /r "$INSTDIR\config"

  56. SetOutPath "$INSTDIR\config"
  57. SetOverwrite on
  58. File "D:\Build Install\Client\GloTrader\src\config\*.*"

  59. SetOutPath "$INSTDIR\en-US"
  60. SetOverwrite on
  61. File "D:\Build Install\Client\GloTrader\src\en-US\*.*"

  62. SetOutPath "$INSTDIR\sounds"
  63. SetOverwrite on
  64. File "D:\Build Install\Client\GloTrader\src\sounds\*.*"

  65. ;SetOutPath "$INSTDIR\Resources"
  66. ;SetOverwrite on
  67. ;File "D:\Build Install\Client\GloTrader\src\Resources\*.*"

  68. ;SetOutPath "$INSTDIR\x64"
  69. ;SetOverwrite on
  70. ;File "D:\Build Install\Client\GloTrader\src\x64\*.*"

  71. ;SetOutPath "$INSTDIR\x86"
  72. ;SetOverwrite on
  73. ;File "D:\Build Install\Client\GloTrader\src\x86\*.*"

  74. SetOutPath "$INSTDIR"
  75. SetOverwrite on
  76. File "D:\Build Install\Client\GloTrader\src\*.*"

  77. ####---注册现有的dll---####
  78. RegDLL "$INSTDIR\StockChartX.ocx"
  79. SectionEnd

  80. Section -AdditionalIcons
  81. CreateDirectory "$SMPROGRAMS\RMMSoft\GloTrader"
  82. CreateShortCut "$SMPROGRAMS\RMMSoft\GloTrader\GloTrader.lnk""$INSTDIR\GloTrader.exe"
  83. CreateShortCut "$DESKTOP\GloTrader.lnk""$INSTDIR\GloTrader.exe"
  84. CreateShortCut "$SMPROGRAMS\RMMSoft\GloTrader\Uninstall.lnk""$INSTDIR\uninst.exe"
  85. SectionEnd

  86. Section -Post
  87. WriteUninstaller "$INSTDIR\uninst.exe"
  88. WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" """$INSTDIR\GloTrader.exe"
  89. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayName" "$(^Name)"
  90. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""UninstallString" "$INSTDIR\uninst.exe"
  91. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayIcon" "$INSTDIR\GloTrader.exe"
  92. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayVersion" "${PRODUCT_VERSION}"
  93. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""URLInfoAbout" "${PRODUCT_WEB_SITE}"
  94. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""Publisher" "${PRODUCT_PUBLISHER}"
  95. SectionEnd

  96. #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
  97. LangString Message0 ${Lang_ENGLISH} "The previous version ofthe GloTrader has been detected and has to be removed before installing the newversion. Are you sure to remove the previous version along with all componentsfrom your computer?"
  98. LangString Message0 ${Lang_SIMPCHINESE} "安装新版本以前,需要先卸载以前的版本!您确实要完全移除GloTrader ,及其所有的组件?"

  99. LangString Message5 ${Lang_ENGLISH} "The $(^Name)installation wizard is already running!"
  100. LangString Message5 ${Lang_SIMPCHINESE} "$(^Name) 安装向导已经运行!"

  101. LangString Message6 ${Lang_ENGLISH} "Current .NetFramework found incompatible, please click OK and continue to download thecorrect version"
  102. LangString Message6 ${Lang_SIMPCHINESE} "安装程序检测到本机的.Net Framework组件不兼容, 点击确定开始下载"
  103. Function .onInit

  104. ;创建互斥防止重复运行
  105. !addplugindir "${NSISDIR}\Plugins"
  106. InitPluginsDir
  107. ;获得此程序自身名称
  108. System::Call 'kernel32::CreateMutexA(i 0, i 0, t "GloTrader")i .r1 ?e'
  109. Pop $R0
  110. StrCmp $R0 0 +3
  111. MessageBox MB_OK|MB_ICONEXCLAMATION "$(Message5)"
  112. Abort

  113. ;判断操作系统是否安装.Net Framework 3.5SP1 XP = "3.5.30729.01" WIN7 = "3.5.30729.4926" .NetFramework 4.0 = 4.0.30319
  114. ReadRegStr $0 HKLM "Software\Microsoft\NETFramework Setup\NDP\v4\Full" "Version"
  115. StrCpy $1 $0 9
  116. ${If} $1 != "4.0.30319"
  117. MessageBox MB_ICONSTOP|MB_OKCANCEL"$(Message6)" IDOK NoAbort
  118. Abort
  119. NoAbort:
  120. ExecShell open"www.microsoft.com/en-us/download/confirmation.aspx?id=17718"
  121. Quit
  122. ${Endif}

  123. ####安装时检测程序是否在运行,并且提示
  124. /*The return codes are as follows:
  125. 0 = Process was not found
  126. 1 = Process was found
  127. 605 = Unable to search for process
  128. 606 = Unable to identify system type
  129. 607 = Unsupported OS
  130. 632 = Process name is invalid*/
  131. !addplugindir "${NSISDIR}\Plugins"
  132. FindProcDLL::FindProc "GloTrader.exe"
  133. ;执行FindProcdll后返回的值自动赋予下面的$R0,然后和1对比,等于1则从+1个命令开始执行反之跳到+4命令执行
  134. StrCmp $R0 1 +1 +4
  135. MessageBox MB_ICONINFORMATION|MB_RETRYCANCEL"$(Message3)" IDRetry retry IDCANCEL Cancel
  136. Retry:
  137. Goto -3
  138. Cancel:
  139. Quit

  140. ReadRegStr $0 HKLM"Software\Microsoft\Windows\CurrentVersion\Uninstall\Full""Version"
  141. ;判断操作系统是否安装本程序
  142. ;如果这个文件存在则继续往下执行代码,反之则从第四个命令执行(注意不是第四行,也就是跳出这个if语句)
  143. IfFileExists "$INSTDIR\uninst.exe" 0 +4
  144. MessageBox MB_ICONQUESTION|MB_YESNO"$(Message0)" IDYES +2
  145. Abort
  146. ExecWait '"$INSTDIR\uninst.exe" /S_?=$INSTDIR'

  147. !insertmacro MUI_LANGDLL_DISPLAY

  148. FunctionEnd

  149. Function onGUIInit
  150. BrandingURL::Set /NOUNLOAD "200" "0""0" "http://www.rmmsoft.com.cn"
  151. FunctionEnd

  152. Function .onGUIEnd
  153. BrandingURL::Unload
  154. FunctionEnd

  155. /******************************
  156. * 以下是安装程序的卸载部分 *
  157. ******************************/
  158. LangString Message1 ${Lang_ENGLISH} "Retain personal perferences?"
  159. LangString Message1 ${Lang_SIMPCHINESE} "是否保留设置文件和历史记录?"
  160. Section Uninstall
  161. ;下面是删除nsis自动创建的一些文件
  162. Delete "$INSTDIR\${PRODUCT_NAME}.url"
  163. Delete "$SMPROGRAMS\RMMSoft\GloTrader\Uninstall.lnk"
  164. Delete "$DESKTOP\GloTrader.lnk"
  165. Delete "$SMPROGRAMS\RMMSoft\GloTrader\GloTrader.lnk"
  166. RMDir "$SMPROGRAMS\RMMSoft\GloTrader"
  167. RMDir /r "C:\ProgramData\Microsoft\Windows\StartMenu\Programs\RMMSoft\GloTrader"
  168. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}"
  169. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  170. ;下面是删除程序安装目录下的所有文件,不包括子目录
  171. Delete "$INSTDIR\*"
  172. ;删除判断后的文件
  173. RMDir /r "$INSTDIR\en-US"
  174. RMDir /r "$INSTDIR\Resources"
  175. RMDir /r "$INSTDIR\x86"
  176. RMDir /r "$INSTDIR\x64"
  177. MessageBox MB_YESNO "$(Message1)" IDYES FOR_YES IDNO FOR_NO
  178. FOR_YES:
  179. Goto NEXT
  180. FOR_NO:
  181. RMDir /r "$INSTDIR\config"
  182. RMDir /r "$INSTDIR"
  183. NEXT:
  184. SetAutoClose true
  185. SectionEnd

  186. #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#

  187. LangString Message2 ${Lang_ENGLISH} "Are you sure to remove$(^Name) with all components from your computer?"
  188. LangString Message2 ${Lang_SIMPCHINESE} "卸载开始!您确实要完全移除 $(^Name) ,及其所有的组件?"

  189. LangString Message3 ${Lang_ENGLISH} "Applicationdetected running, please close before continue. Click CANCEL toexit."
  190. LangString Message3 ${Lang_SIMPCHINESE} "检测到 $(^Name) 正在运行!请退出程序重试或取消卸载!"

  191. LangString Message4 ${Lang_ENGLISH} "$(^Name) hasuninstalled completely!"
  192. LangString Message4 ${Lang_SIMPCHINESE} "$(^Name) 卸载完毕!"
  193. Function un.onInit
  194. !insertmacro MUI_UNGETLANGUAGE
  195. MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2"$(Message2)" IDYES +2
  196. Abort

  197. ####卸载时检测程序是否在运行,并且提示
  198. /*The return codes are as follows:
  199. 0 = Process was not found
  200. 1 = Process was found
  201. 605 = Unable to search for process
  202. 606 = Unable to identify system type
  203. 607 = Unsupported OS
  204. 632 = Process name is invalid*/
  205. !addplugindir "${NSISDIR}\Plugins"
  206. FindProcDLL::FindProc "GloTrader.exe"
  207. ;执行FindProcdll后返回的值自动赋予下面的$R0,然后和1对比,等于1则从+1个命令开始执行反之跳到+4命令执行
  208. StrCmp $R0 1 +1 +4
  209. MessageBox MB_ICONINFORMATION|MB_RETRYCANCEL"$(Message3)" IDRetry retry IDCANCEL Cancel
  210. Retry:
  211. Goto -3
  212. Cancel:
  213. Quit
  214. FunctionEnd

  215. Function un.onUninstSuccess
  216. HideWindow
  217. MessageBox MB_ICONINFORMATION|MB_OK "$(Message4)"
  218. FunctionEnd
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-19 17:50 , Processed in 0.120540 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表