一 NSIS工具的使用
- 启动NIS Edit。
- 在“文件”菜单中“新建脚本:向导”=>下一步”。
- 设置应用程序信息,如软件名称、版本、出版人等,当然最一个网站可以留空,如果设置了,则安装包会生成一个对应网址的“Internet 快捷方式”。
- 设置程序选项,如安装包图标、安装程序文件、安装包语言[这里选“SimpChinese”]、用户图形界面及压缩方式等,可以选用默认值,也可以点击对应项目的按钮或下拉菜单更改设置。
- 设置安装目录及授权信息,然后后“下一步”,其中授权文件可不填写,如果你需要对你打包的软件提供用户使用文档,可自行创建文件然后将文件目录填入。
- 选定程序文件,即我们要打包的文件,可以使用默认的“Mainsection”,也可以根据需要进行更改或新建组别,如果组比较多时,你也可以设置是否“允许用户选择要安装的组件”。
- 完毕后进行“添加文件”操作,选定我们要打包的文件,点击确定,然后执行下一步操作。
- 设置开始菜单中文件夹名称及快捷方式,一般使用默认值, 然后“下一步”。
- 指定安装后要运行的程序,同上用默认值并设置相关运行参数及描述,或不想在安装运行任何程序,则留空即可。
- .这步是有关卸载程序的相关信息,如卸载时的提示、卸载的图标等。
- 点击下一步后,跳到完成向导界面,勾选“保存脚本”和“转换文件路径到相关路径”。
- 点击完成后,自定义保存路径和保存文件名。
13.找到保存的文件,双击打开。
14.打开以后,点击编译运行,生成可执行文件。
**
二 后台运行操作
**
在如图位置加入如下代码设置对XXX.exe后台运行操作
Function .onInstSuccess
ExecShell "open" "$INSTDIR\ICCKey.exe"
ExecShell "open" "$INSTDIR\PkiApiService.exe"
FunctionEnd
**
三 卸载结束后台进程操作
**
首先执行结束后台进程需要确保NSIS安装目录下的Plugins目录下存在下图两个库。
然后在卸载函数里添加下图代码。
;删除进程
FindProcDLL::FindProc "ICCKey.exe"
Push "icckey.exe"
KillProcDLL::KillProc
FindProcDLL::FindProc "PkiApiService.exe"
Push "PkiApiService.exe"
KillProcDLL::KillProc
在卸载的时候,加上RMDir /r “$INSTDIR”,可以卸载整个安装目录。
RMDir /r "$INSTDIR"
**
四 开机自启动操作
**
对于制作好的安装包,有些时候可能需要在安装完成界面上添加一个可勾选的开机自启动的选项,下面是具体的细节。
1.在安装完成界面设置添加如下代码,务必要添加在 " !insertmacro MUIPAGEFINISH "之前。
!define MUI_FINISHPAGE_SHOWREADME
!define MUI_FINISHPAGE_SHOWREADME_Function AutoBoot
!define MUI_FINISHPAGE_SHOWREADME_TEXT "开机自动启动"
!insertmacro MUI_PAGE_FINISH
2.在Section后区段的后面添加Function部分(在Section之后,是为了避免产生未知的错误)把上面的PKI5.0替换成你要打包程序名就行了,主要是把信息写入系统注册表,代码如下:
Function AutoBoot
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "ICCKey"'"$INSTDIR\ICCKey.exe"'
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "PkiApiService"'"$INSTDIR\PkiApiService.exe"'
FunctionEnd
3.前两步已经可以实现开机自启动了。这最后一步,需要在卸载和初始化区段里面把注册表信息删除。原因是让用户在卸载程序和覆盖安装程序后,不会受到刚开始安装程序的写入系统注册表的影响。 在Function .onInit里面添加如下代码:
;删除开机自启
Function un.onInit
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Run\ICCKey"
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Run\PkiApiService"
!insertmacro MUI_UNGETLANGUAGE
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
Abort
FunctionEnd
在Section Uninstall里面添加如下代码:
;删除开机自启
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Run\ICCKey"
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Run\PkiApiService"
**
五 带注册码
**
使用时需要借助一个PassDialog.dll这个插件去做注册码生成输入框。
然后编写如图代码。
;安装密码
!define Password "123"
;密码输入页面
Page Custom PasswordPageShow PasswordPageLeave
Function PasswordPageShow
!insertmacro MUI_HEADER_TEXT "输入密码" "安装程序需要一个正确的安装密码才能继续。"
PassDialog::InitDialog /NOUNLOAD Password /HEADINGTEXT "请输入密码。" /GROUPTEXT "密码输入框"
Pop $R0 # Page HWND
SendMessage $R1 ${EM_SETPASSWORDCHAR} 178 0
PassDialog::Show
FunctionEnd
;验证密码
Function PasswordPageLeave
;从堆栈取出密码
Pop $R0
;密码错误
StrCmp $R0 '${Password}' +3
MessageBox MB_OK|MB_ICONEXCLAMATION "密码输入错误!请输入正确的安装密码!"
Abort
;密码正确
MessageBox MB_OK|MB_ICONEXCLAMATION "密码正确!"
;Abort
FunctionEnd