如何用NSIS打包程序

假如你有一个很棒的程序,能实现许多有趣的功能,你该怎么分享给你的好友呢,如果让你把庞大的工程传给他,我的天,那得传到什么时候?

于是,学会打包程序也成为程序员的一个必备技能了

在这里我用的是:NSIS(Nullsoft Scriptable Install System)+NIS Edit,下载请自行百度。


1、安装完毕,打开NIS Edit,点击文件,选择新建脚本:向导(W),如下图所示。


2、点击下一步,在这里相应更改,将应用程序名称填写*.exe文件名;软件版本、出版人、网站根据实际需要填写(若没有,则保留空白即可);程序标志会在安装界面的底部显示(若不需要也可选择不显示文本)。设置完成后选择下一步。


3、在下图中将安装语言选择为“simple chinese”,同时设置安装程序显示的图标,接着点击下一步:


4、只需修改自定义的授权文件,可自己新建一个txt或rft文件并写入一些软件授权信息或其他信息(文件内容在安装过程中会显示出来并让用户选择接受协议),其他保留默认设置。选择下一步


5、这一步是最关键的,关系到最终能否打包成功。将下图中的组名称修改为“主程序必选”,描述信息可写可不写,同时将箭头所指中 "c:\path\to\file\AppMainExe.exe", c:\path\to\file\Example.file 都删除,允许用户选择要安装的组件。最后点击上方的树形图按钮


点击树形目录,这里选择要发布的*.exe程序所在目录(最好将发布程序时所有用到的文件均拷贝到该目录下,都放到一个目录下,即绿色版的目录),并选中"包含子目录"以及"单独添加每个文件(如果有)" ,其余保留默认设置。 然后选择确定,加载完目录下所有文件后,点击下一步


6、这一步可保留所有默认设置(默认生成开始菜单和桌面快捷方式),我在实际中用的是SZPT,方便自己查询,这个根据个人需要,然后选择下一步


7、可保留默认设置(当然也可添加一些自定义的自述,如汉化说明等等),选择下一步


8、在图中只需要修改自定义的卸载程序图标就可以了,其他项保留默认设置,选择下一步


9、选择“保存脚本”,“转换文件路径到相对路径”,“编译脚本”,然后用NIS Edit进行编译,执行打包过程,最后生成成功,点击Setup.exe运行即可安装。


注意:如果想在程序安装的时候需要进行.NET FRAMEWORK的判断及静默安装,则需要在nsi脚本中添加如下代码:

Function GetNetFrameworkVersion
;获取.Net Framework版本支持
Push $1
Push $0
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Version"
StrCmp $0 1 KnowNetFrameworkVersion +1
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Install"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Version"
StrCmp $0 1 KnowNetFrameworkVersion +1
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version"
StrCmp $0 1 KnowNetFrameworkVersion +1
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version"
StrCmp $1 "" +1 +2
StrCpy $1 "2.0.50727.832"
StrCmp $0 1 KnowNetFrameworkVersion +1
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version"
StrCmp $1 "" +1 +2
StrCpy $1 "1.1.4322.573"
StrCmp $0 1 KnowNetFrameworkVersion +1
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Install"
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Version"
StrCmp $1 "" +1 +2
StrCpy $1 "1.0.3705.0"
StrCmp $0 1 KnowNetFrameworkVersion +1
StrCpy $1 "not .NetFramework"
KnowNetFrameworkVersion:
Pop $0
Exch $1
FunctionEnd

安装程序是判断当前电脑是否已安装程序,是否卸载

Var UNINSTALL_PROG
Var OLD_VER
Var OLD_PATH
Function .onInit
  ClearErrors
  ReadRegStr $UNINSTALL_PROG ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString"
  IfErrors  done

  ReadRegStr $OLD_VER ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "DisplayVersion"
  MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \
    "检测到本机已经安装了 ${PRODUCT_NAME} $OLD_VER。\
    $\n$\n是否先卸载已安装的版本?" \
      /SD IDYES \
      IDYES uninstall \
      IDNO done
  Abort

uninstall:
  StrCpy $OLD_PATH $UNINSTALL_PROG -10

  ExecWait '"$UNINSTALL_PROG" /S _?=$OLD_PATH' $0
  DetailPrint "uninst.exe returned $0"
  Delete "$UNINSTALL_PROG"
  RMDir $OLD_PATH


done:
FunctionEnd

以上代码可以放在Section "主程序必选" SEC01之前,然后在进行编译脚本。

如果要运行批处理,且需要在安装路径运行,可添加以下代码:

Section "生成机器码"
#SetOutPath "$INSTDIR\runHID.bat"
#nsExec::Exec "$INSTDIR\runHID.bat"
SetOutPath '$INSTDIR'
ExecWait '$INSTDIR/runHID.bat'
SectionEnd
此段代码看放在主文件安装函数之后

编译成功

显示Total size xxx/xxxx (xxx%)

在学习的过程中,找到http://www.flighty.cn/,轻狂志的个人网站,看他写了好多相关的文章,非常好,先mark了,后面继续学习!

问:如何运行一个批处理文件 .bat
答:注:your.bat为文件名
ExecWait "your.bat"
不显示黑框框
nsExec::Exec "your.bat"

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值