NSIS是一个不错的安装程序设计工具,能够很容易打包各种程序,对于初学者来说,个人认为能够做出个产品看到成果比先学习各种理论要有效的多。我不是NSIS高手,制作一个程序也是整天在论坛翻资料,也许正因为如此写出来的经验更能让初学者接受。
今天的实例是制作Photoshop7.0绿化版安装程序,需要的的源文件请网友到网盘下载,网友把压缩包内的文件解压到D盘根目录就可以直接编译。
相关代码:
- ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
- !include "LogicLib.nsh"
- ; 安装程序初始定义常量
- !define PRODUCT_NAME "Photoshop绿色精简版" ;程序名称
- !define PRODUCT_VERSION "7.0" ;程序版本号
- !define PRODUCT_PUBLISHER "启光博客[IEWB.NET], Inc." ;安装过程中的程序标识
- !define PRODUCT_WEB_SITE "http://www.iewb.net" ;官方网站
- !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Photoshop.exe"
- !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
- !define PRODUCT_UNINST_ROOT_KEY "HKLM"
- SetCompressor lzma
- ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
- !include "MUI.nsh"
- ; MUI 预定义常量
- !define MUI_ABORTWARNING
- !define MUI_ICON "D:\Photoshop 7.0\ico.ico" ;程序图标
- !define MUI_UNICON "C:\图标\uninstall.exe_0.ico" ;卸载程序图标
- !define MUI_WELCOMEFINISHPAGE_BITMAP "E:\aaa\Wop.bmp" ;安装程序左侧图片,128*214大小
- !define MUI_WELCOMEPAGE_TEXT " 程序通过Photoshop7.0修改精简,程序仅供测试,如果您喜欢此软件,请购买正版.。\r\n\r\n 版权属于Adobe Systems\r\n\r\n 启光博客:www.iewb.net\r\n\r\n $_CLICK" ;安装向导说明文字
- ; 欢迎页面
- !insertmacro MUI_PAGE_WELCOME
- ; 许可协议页面
- !insertmacro MUI_PAGE_LICENSE "D:\Photoshop 7.0\readme.txt" ;安装协议条款,同意后才能继续
- !define MUI_DIRECTORYPAGE_TEXT_TOP "您可以选择任意目录安装本程序,更多绿化程序请访问 启光博客 IEWB.NET" ;选择安装目录时的说明文字
- ; 安装目录选择页面
- !insertmacro MUI_PAGE_DIRECTORY
- ; 安装过程页面
- !insertmacro MUI_PAGE_INSTFILES
- ; 安装完成页面
- !define MUI_FINISHPAGE_RUN "$INSTDIR\Photoshop.exe"
- !insertmacro MUI_PAGE_FINISH
- ; 安装卸载过程页面
- !insertmacro MUI_UNPAGE_INSTFILES
- ; 安装界面包含的语言设置
- !insertmacro MUI_LANGUAGE "SimpChinese"
- ; 安装预释放文件
- !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
- ; ------ MUI 现代界面定义结束 ------
- Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
- OutFile "aaa.exe" ;生成的程序名字
- InstallDir "$PROGRAMFILES\Photoshop绿色精简版"
- InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
- ShowInstDetails show
- ShowUnInstDetails show
- BrandingText "启光博客[IEWB.NET], Inc."
- ; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)
- Section "-LogSetOn"
- LogSet on
- SectionEnd
- Section "MainSection" SEC01
- SetOutPath "$INSTDIR"
- SetOverwrite ifnewer
- File /r "D:\Photoshop 7.0\*.*" ;需要打包的程序源文件目录
- CreateDirectory "$SMPROGRAMS\Photoshop绿色精简版"
- CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\Photoshop绿色精简版.lnk" "$INSTDIR\Photoshop.exe" ;需要生成的快捷方式
- CreateShortCut "$DESKTOP\Photoshop绿色精简版.lnk" "$INSTDIR\Photoshop.exe"
- File "D:\Photoshop 7.0\Photoshop.exe"
- File "D:\Photoshop 7.0\注册.reg"
- SectionEnd
- Section -AdditionalIcons
- WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
- CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\启光博客.lnk" "$INSTDIR\${PRODUCT_NAME}.url" ;在安装目录生成官方网站快捷方式
- CreateShortCut "$SMPROGRAMS\Photoshop绿色精简版\Uninstall.lnk" "$INSTDIR\uninst.exe"
- SectionEnd
- Section -Post
- WriteUninstaller "$INSTDIR\uninst.exe"
- WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Photoshop.exe"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Photoshop.exe"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
- WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
- SectionEnd
- Section
- ExecWait 'Regedit.exe /s "$INSTDIR\注册.reg"' ;运行注册表注册程序,如果你不想让用户看到注册表可以把注册表文件换个目录
- Sectionend
- /******************************
- * 以下是安装程序的卸载部分 *
- ******************************/
- ; 根据安装日志卸载文件的调用宏
- !macro DelFileByLog LogFile
- ifFileExists `${LogFile}` 0 +4
- Push `${LogFile}`
- Call un.DelFileByLog
- Delete `${LogFile}`
- !macroend
- Section Uninstall
- Delete "$INSTDIR\${PRODUCT_NAME}.url"
- ; 调用宏只根据安装日志卸载安装程序自己安装过的文件
- !insertmacro DelFileByLog "$INSTDIR\install.log"
- ; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 /r 参数,否则会失去 DelFileByLog 的意义)
- RMDir "$SMPROGRAMS\Photoshop绿色精简版"
- RMDir "$INSTDIR\Required"
- RMDir "$INSTDIR\Plug-Ins\Parser"
- RMDir "$INSTDIR\Plug-Ins\Import-Export"
- RMDir "$INSTDIR\Plug-Ins\Filters"
- RMDir "$INSTDIR\Plug-Ins\File Formats"
- RMDir "$INSTDIR\Plug-Ins\Effects"
- RMDir "$INSTDIR\Plug-Ins\Displacement Maps"
- RMDir "$INSTDIR\Plug-Ins\Adobe Photoshop Only"
- RMDir "$INSTDIR\Plug-Ins"
- RMDir "$INSTDIR\Legal"
- RMDir "$INSTDIR"
- DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
- DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
- SetAutoClose true
- SectionEnd
- #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
- Function un.onInit
- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
- Abort
- FunctionEnd
- Function un.onUninstSuccess
- HideWindow
- MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
- FunctionEnd
- ; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改
- Function un.DelFileByLog
- Exch $R0
- Push $R1
- Push $R2
- Push $R3
- FileOpen $R0 $R0 r
- ${Do}
- FileRead $R0 $R1
- ${IfThen} $R1 == `` ${|} ${ExitDo} ${|}
- StrCpy $R1 $R1 -2
- StrCpy $R2 $R1 11
- StrCpy $R3 $R1 20
- ${If} $R2 == "File: wrote"
- ${OrIf} $R2 == "File: skipp"
- ${OrIf} $R3 == "CreateShortCut: out:"
- ${OrIf} $R3 == "created uninstaller:"
- Push $R1
- Push `"`
- Call un.DelFileByLog.StrLoc
- Pop $R2
- ${If} $R2 != ""
- IntOp $R2 $R2 + 1
- StrCpy $R3 $R1 "" $R2
- Push $R3
- Push `"`
- Call un.DelFileByLog.StrLoc
- Pop $R2
- ${If} $R2 != ""
- StrCpy $R3 $R3 $R2
- Delete /REBOOTOK $R3
- ${EndIf}
- ${EndIf}
- ${EndIf}
- StrCpy $R2 $R1 7
- ${If} $R2 == "Rename:"
- Push $R1
- Push "->"
- Call un.DelFileByLog.StrLoc
- Pop $R2
- ${If} $R2 != ""
- IntOp $R2 $R2 + 2
- StrCpy $R3 $R1 "" $R2
- Delete /REBOOTOK $R3
- ${EndIf}
- ${EndIf}
- ${Loop}
- FileClose $R0
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- FunctionEnd
- Function un.DelFileByLog.StrLoc
- Exch $R0
- Exch
- Exch $R1
- Push $R2
- Push $R3
- Push $R4
- Push $R5
- StrLen $R2 $R0
- StrLen $R3 $R1
- StrCpy $R4 0
- ${Do}
- StrCpy $R5 $R1 $R2 $R4
- ${If} $R5 == $R0
- ${OrIf} $R4 = $R3
- ${ExitDo}
- ${EndIf}
- IntOp $R4 $R4 + 1
- ${Loop}
- ${If} $R4 = $R3
- StrCpy $R0 ""
- ${Else}
- StrCpy $R0 $R4
- ${EndIf}
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Exch $R0
- 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.