NSIS脚本定制安装程序包

有些时候用VS生成的安装包外观并不能满足项目的要求,这里用NSIS脚本来定制安装包。

一、基本安装包制作过程

1、下载安装NSIS脚本编译运行环境http://pan.baidu.com/share/link?shareid=465262&uk=487232489

2、安装好后,打开“VNISEdit 编译环境”,按“Ctrl+W”打开“NSIS脚本向导”对话框。如下图,输入相应的信息,为了便于观察,在这里我将一些名称参数放在两个“=”之间。

3、设置安装程序图标,安装程序文件即生成exe格式文件的名称、多语言选择。用户图形界面和压缩算法默认就好,这里使用的是官方发布的“MUI.nsh”,当然如果你有足够的时间去研究NSIS脚本的话完全可以自己动手写每一个Page。

4、这一步根据需要设置吧,不过我觉得大多数情况下时用不到的。

5、设置 是否允许用户更改应用程序目录、授权文件的位置、选择用户接受许可协议的方式。如果你是多语言,针对不同的语言要使用不同的许可协议,不要着急后面有介绍。

6、这一步指定我们待安装的文件的位置,先删除默认的两个文件,

然后单击“”按钮导入我们的安装文件,要注意勾选“包含子目录”、“单独添加每个文件”。确定后如下图(5/8)所示

7、默认就好

8、默认。如果程序没有默认显示你的运行文件,回到第六步,检查是否引入文件有疏漏。

9、

10、勾选所有选项,结束后就会生成".nsh"http://pan.baidu.com/share/link?shareid=465419&uk=487232489和编译好的".exe"文件。

 

二、完成简单的定制

1、修改欢迎图片(左侧图片)和HeaderImage(紧贴标题栏下面右侧图片)

在下面代码

; 欢迎页面
!insertmacro MUI_PAGE_WELCOME

之前插入代码

;=====================================================================================================
;开启HeaderImage
!define MUI_HEADERIMAGE
;把HeaderImage放到右边
!define MUI_HEADERIMAGE_RIGHT
;修改欢迎页面
!insertmacro MUI_DEFAULT MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp"
;修改HeaderImage,此处为了能将HeaderImage路径暴露出来,修改了System.nsh
!insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\win.bmp"
;=====================================================================================================

默认的HeaderImage是在左侧,这里为了方便修改了System.nsh(在NSIS的安装目录中可以找到),修改如下:在"!ifdef MUI_HEADERIMAGE"节点下添加节点"!ifndef MUI_HEADERIMAGE_BITMAP"

!ifdef MUI_HEADERIMAGE

      !ifndef MUI_HEADERIMAGE_BITMAP
        !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\header_right.bmp"
      !endif
      
      !ifndef MUI_HEADERIMAGE_UNBITMAP


 

2、多语言,针对不同语言使用不同的许可协议

在代码

; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "TraditionalChinese"

之后加入

;=====================================================================================================
;选择不同文字时使用不同的声明文件
LicenseLangString myLicenseData ${LANG_ENGLISH} "..\Release\licences\eng.txt"
LicenseLangString myLicenseData ${LANG_TRADitionalCHINESE} "..\Release\licences\tchinese.txt"
LicenseLangString myLicenseData ${LANG_SIMPCHINESE} "..\Release\licences\schinese.txt"
;=====================================================================================================

接着将

!insertmacro MUI_PAGE_LICENSE "..\Release\licences\eng.txt"

修改为

!insertmacro MUI_PAGE_LICENSE $(myLicenseData)

这样一来,当我们选择不同的语言时,在许可协议页面就会显示不同的版本。

另外,原繁体字文件"TradChinese.nsh"可能无法使用,致使虽然我们在向导中选择了繁体字,而安装包却没有它的选项。这是繁体字文件的编码出现问题了,我们只需要照着"SimpChinese.nsh"重写一个就可以了,我这里修改后的是http://pan.baidu.com/share/link?shareid=465422&uk=487232489http://pan.baidu.com/share/link?shareid=465423&uk=487232489。将他们放在安装目录的语言文件夹中如:"D:\Program Files (x86)\NSIS\Contrib\Language files\"。要注意的是如果自定义语言文件了,就要在下面引入语言包语句中做相应的更改

!insertmacro MUI_LANGUAGE "对应的语言包名"


3、插入移动设备后弹出提示框,可供选择我们的程序打开

这里需要修改注册表。如下所示

...
SectionEnd
 
;=====================================================================================================
;修改注册表,程序没有启动时插入U盘,弹出选择窗口
Section -autorun
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\ShowPicturesOnArrival" "${PRODUCT_NAME}" ""
    WriteRegStr HKLM "SOFTWARE\Classes\ARP_MediaHandlers\shell\${PRODUCT_NAME}" "" "${PRODUCT_NAME}"

    WriteRegStr HKLM "SOFTWARE\Classes\ARP_MediaHandlers\shell\${PRODUCT_NAME}\command" "" "$INSTDIR\benq_cloub.exe '%L'"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "" ""
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "Action" "${PRODUCT_NAME}"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "DefaultIcon" "$INSTDIR\benq_coud.ico"
  WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "InvokeProgId" "ARP_MediaHandlers"
  WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "InvokeVerb" "${PRODUCT_NAME}"
  WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\${PRODUCT_NAME}" "Provider" "${PRODUCT_NAME}"
SectionEnd
;======================================================================================================
 
Section -Post
   ...


这里我没有写在卸载的时候删除这些注册表,原理都差不多,使用"DeleteRegKey"命令。

另外,现在的windows系统为了安全起见,默认关闭了除了光盘驱动之外的其他设备的自动播放,如果想中播放U盘等移动设备win7系统可以修改注册表"[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Expolrer]"将键"NoDriveTypeAutoRun"的值改为"1"。有关"NoDriveTypeAutoRun"值的含义可参看http://pan.baidu.com/share/link?shareid=465426&uk=487232489 

 

修改后的NSIS脚本http://pan.baidu.com/share/link?shareid=465427&uk=487232489

编译好的安装包(64位)http://pan.baidu.com/share/link?shareid=465428&uk=487232489

 

上面的链接被我不小心删了,现重新加个链接http://pan.baidu.com/share/link?shareid=2269500261&uk=487232489

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值