Skip to content


NSIS程序设计实例:Photoshop7.0绿化

NSIS是一个不错的安装程序设计工具,能够很容易打包各种程序,对于初学者来说,个人认为能够做出个产品看到成果比先学习各种理论要有效的多。我不是NSIS高手,制作一个程序也是整天在论坛翻资料,也许正因为如此写出来的经验更能让初学者接受。

今天的实例是制作Photoshop7.0绿化版安装程序,需要的的源文件请网友到网盘下载,网友把压缩包内的文件解压到D盘根目录就可以直接编译。

相关代码:

  1. ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
  2.  
  3. !include "LogicLib.nsh"
  4.  
  5. ; 安装程序初始定义常量
  6. !define PRODUCT_NAME "Photoshop绿色精简版" ;程序名称
  7. !define PRODUCT_VERSION "7.0" ;程序版本号
  8. !define PRODUCT_PUBLISHER "启光博客[IEWB.NET], Inc." ;安装过程中的程序标识
  9. !define PRODUCT_WEB_SITE "http://www.iewb.net" ;官方网站
  10. !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Photoshop.exe"
  11. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  12. !define PRODUCT_UNINST_ROOT_KEY "HKLM"
  13.  
  14. SetCompressor lzma
  15.  
  16. ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
  17. !include "MUI.nsh"
  18.  
  19. ; MUI 预定义常量
  20. !define MUI_ABORTWARNING
  21. !define MUI_ICON "D:\Photoshop 7.0\ico.ico"  ;程序图标
  22. !define MUI_UNICON "C:\图标\uninstall.exe_0.ico"  ;卸载程序图标
  23. !define MUI_WELCOMEFINISHPAGE_BITMAP "E:\aaa\Wop.bmp"  ;安装程序左侧图片,128*214大小
  24. !define MUI_WELCOMEPAGE_TEXT "  程序通过Photoshop7.0修改精简,程序仅供测试,如果您喜欢此软件,请购买正版.。\r\n\r\n  版权属于Adobe Systems\r\n\r\n  启光博客:www.iewb.net\r\n\r\n  $_CLICK" ;安装向导说明文字
  25. ; 欢迎页面
  26. !insertmacro MUI_PAGE_WELCOME
  27. ; 许可协议页面
  28. !insertmacro MUI_PAGE_LICENSE "D:\Photoshop 7.0\readme.txt"  ;安装协议条款,同意后才能继续
  29. !define MUI_DIRECTORYPAGE_TEXT_TOP "您可以选择任意目录安装本程序,更多绿化程序请访问 启光博客 IEWB.NET"  ;选择安装目录时的说明文字
  30. ; 安装目录选择页面
  31. !insertmacro MUI_PAGE_DIRECTORY
  32. ; 安装过程页面
  33. !insertmacro MUI_PAGE_INSTFILES
  34.  
  35. ; 安装完成页面
  36. !define MUI_FINISHPAGE_RUN "$INSTDIR\Photoshop.exe"
  37. !insertmacro MUI_PAGE_FINISH
  38.  
  39. ; 安装卸载过程页面
  40. !insertmacro MUI_UNPAGE_INSTFILES
  41.  
  42. ; 安装界面包含的语言设置
  43. !insertmacro MUI_LANGUAGE "SimpChinese"
  44.  
  45. ; 安装预释放文件
  46. !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
  47.  
  48. ; ------ MUI 现代界面定义结束 ------
  49.  
  50. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
  51. OutFile "aaa.exe"    ;生成的程序名字
  52. InstallDir "$PROGRAMFILES\Photoshop绿色精简版"
  53. InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
  54. ShowInstDetails show
  55. ShowUnInstDetails show
  56. BrandingText "启光博客[IEWB.NET], Inc."
  57.  
  58. ; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)
  59. Section "-LogSetOn"
  60. LogSet on
  61. SectionEnd
  62.  
  63. Section "MainSection" SEC01
  64. SetOutPath "$INSTDIR"
  65. SetOverwrite ifnewer
  66. File /r "D:\Photoshop 7.0\*.*"  ;需要打包的程序源文件目录
  67. CreateDirectory "$SMPROGRAMS\Photoshop绿色精简版"
  68. CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\Photoshop绿色精简版.lnk" "$INSTDIR\Photoshop.exe"  ;需要生成的快捷方式
  69. CreateShortCut "$DESKTOP\Photoshop绿色精简版.lnk" "$INSTDIR\Photoshop.exe"
  70. File "D:\Photoshop 7.0\Photoshop.exe"
  71. File "D:\Photoshop 7.0\注册.reg"
  72. SectionEnd
  73.  
  74. Section -AdditionalIcons
  75. WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  76. CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\启光博客.lnk" "$INSTDIR\${PRODUCT_NAME}.url"  ;在安装目录生成官方网站快捷方式
  77. CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\Uninstall.lnk" "$INSTDIR\uninst.exe"
  78. SectionEnd
  79.  
  80. Section -Post
  81. WriteUninstaller "$INSTDIR\uninst.exe"
  82. WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Photoshop.exe"
  83. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  84. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  85. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Photoshop.exe"
  86. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  87. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  88. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
  89. SectionEnd
  90.  
  91. Section
  92. ExecWait 'Regedit.exe /s "$INSTDIR\注册.reg"'  ;运行注册表注册程序,如果你不想让用户看到注册表可以把注册表文件换个目录
  93. Sectionend
  94.  
  95. /******************************
  96. *  以下是安装程序的卸载部分  *
  97. ******************************/
  98.  
  99. ; 根据安装日志卸载文件的调用宏
  100. !macro DelFileByLog LogFile
  101. ifFileExists `${LogFile}` 0 +4
  102. Push `${LogFile}`
  103. Call un.DelFileByLog
  104. Delete `${LogFile}`
  105. !macroend
  106.  
  107. Section Uninstall
  108. Delete "$INSTDIR\${PRODUCT_NAME}.url"
  109.  
  110. ; 调用宏只根据安装日志卸载安装程序自己安装过的文件
  111. !insertmacro DelFileByLog "$INSTDIR\install.log"
  112.  
  113. ; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 /r 参数,否则会失去 DelFileByLog 的意义)
  114. RMDir "$SMPROGRAMS\Photoshop绿色精简版"
  115. RMDir "$INSTDIR\Required"
  116. RMDir "$INSTDIR\Plug-Ins\Parser"
  117. RMDir "$INSTDIR\Plug-Ins\Import-Export"
  118. RMDir "$INSTDIR\Plug-Ins\Filters"
  119. RMDir "$INSTDIR\Plug-Ins\File Formats"
  120. RMDir "$INSTDIR\Plug-Ins\Effects"
  121. RMDir "$INSTDIR\Plug-Ins\Displacement Maps"
  122. RMDir "$INSTDIR\Plug-Ins\Adobe Photoshop Only"
  123. RMDir "$INSTDIR\Plug-Ins"
  124. RMDir "$INSTDIR\Legal"
  125.  
  126. RMDir "$INSTDIR"
  127.  
  128. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  129. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  130. SetAutoClose true
  131. SectionEnd
  132.  
  133. #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
  134.  
  135. Function un.onInit
  136. MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
  137. Abort
  138. FunctionEnd
  139.  
  140. Function un.onUninstSuccess
  141. HideWindow
  142. MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
  143. FunctionEnd
  144.  
  145. ; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改
  146. Function un.DelFileByLog
  147. Exch $R0
  148. Push $R1
  149. Push $R2
  150. Push $R3
  151. FileOpen $R0 $R0 r
  152. ${Do}
  153. FileRead $R0 $R1
  154. ${IfThen} $R1 == `` ${|} ${ExitDo} ${|}
  155. StrCpy $R1 $R1 -2
  156. StrCpy $R2 $R1 11
  157. StrCpy $R3 $R1 20
  158. ${If} $R2 == "File: wrote"
  159. ${OrIf} $R2 == "File: skipp"
  160. ${OrIf} $R3 == "CreateShortCut: out:"
  161. ${OrIf} $R3 == "created uninstaller:"
  162. Push $R1
  163. Push `"`
  164. Call un.DelFileByLog.StrLoc
  165. Pop $R2
  166. ${If} $R2 != ""
  167. IntOp $R2 $R2 + 1
  168. StrCpy $R3 $R1 "" $R2
  169. Push $R3
  170. Push `"`
  171. Call un.DelFileByLog.StrLoc
  172. Pop $R2
  173. ${If} $R2 != ""
  174. StrCpy $R3 $R3 $R2
  175. Delete /REBOOTOK $R3
  176. ${EndIf}
  177. ${EndIf}
  178. ${EndIf}
  179. StrCpy $R2 $R1 7
  180. ${If} $R2 == "Rename:"
  181. Push $R1
  182. Push "->"
  183. Call un.DelFileByLog.StrLoc
  184. Pop $R2
  185. ${If} $R2 != ""
  186. IntOp $R2 $R2 + 2
  187. StrCpy $R3 $R1 "" $R2
  188. Delete /REBOOTOK $R3
  189. ${EndIf}
  190. ${EndIf}
  191. ${Loop}
  192. FileClose $R0
  193. Pop $R3
  194. Pop $R2
  195. Pop $R1
  196. Pop $R0
  197. FunctionEnd
  198.  
  199. Function un.DelFileByLog.StrLoc
  200. Exch $R0
  201. Exch
  202. Exch $R1
  203. Push $R2
  204. Push $R3
  205. Push $R4
  206. Push $R5
  207. StrLen $R2 $R0
  208. StrLen $R3 $R1
  209. StrCpy $R4 0
  210. ${Do}
  211. StrCpy $R5 $R1 $R2 $R4
  212. ${If} $R5 == $R0
  213. ${OrIf} $R4 = $R3
  214. ${ExitDo}
  215. ${EndIf}
  216. IntOp $R4 $R4 + 1
  217. ${Loop}
  218. ${If} $R4 = $R3
  219. StrCpy $R0 ""
  220. ${Else}
  221. StrCpy $R0 $R4
  222. ${EndIf}
  223. Pop $R5
  224. Pop $R4
  225. Pop $R3
  226. Pop $R2
  227. Pop $R1
  228. Exch $R0
  229. FunctionEnd

代码已经有了详细的安装说明,其中卸载程序ICO文件和安装文件左侧图片网友可以自己制作或随便从网上下载一个。
生成的安装文件演示:Photoshop 7.0.exe
另外,本代码编译的卸载方式是完整卸载,网上直接下载的NSIS都需要LOG补丁,NSIS V2.45中文增强版补丁文件nsis-2.45-log.zip下载

相关文章

所属分类 技术文章.

文章标签 , .

原创文章转载请注明,转载自:启光博客[http://www.iewb.net]

原文链接: http://www.iewb.net/index.php/qg/1703.html


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



欢迎点评

or, reply to this post via trackback.