利用NSIS创建自己的windows安装程序

借鉴文章来自:http://www.hanzify.org/teach/index.php?Go=Show::196-1108396800
增加常见问题解决方案

NSIS简介

    NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装、卸载系统,它的特点:脚本简洁高效;系统开销小;当然进行安装、卸载、设置系统设置、解压文件等等更不在话下,几乎可以做所有的事情。更多的功能请阅读官方文档。

工具
  • NIS Edit v2.0.3
  • NSIS v3.03
思路:

脚本向导+修改代码=个性化安装包

步骤:

1.安装上面两款软件,启动NIS Edit,在“文件”菜单中“新建脚本:向导”->下一步”,如图1:
图片来自网上
2.设置应用程序信息,如软件名称、版本、出版人等,如图2。如果设置了应用程序网站,则安装包会生成一个对应网址的“Internet 快捷方式”。
这里写图片描述
3.设置程序选项,如安装包图标、安装程序文件、安装包语言[这里选“SimChinese”]、用户图形界面及压缩方式等,选用默认值,也可以点击对应项目的按钮或下拉菜单更改设置,如下图3
这里写图片描述
4.设置安装目录及授权信息,如图4后“下一步”:
这里写图片描述
5.选定程序文件,即我们要打包的文件,可以使用默认的“Mainsection”,也可以根据需要进行更改或新建组别,如果组比较多时,可以设置是否“允许用户选择要安装的组件”,如图5
这里写图片描述
6.完毕后进行“添加文件”操作,选定我们要打包的文件,如图6,完成自动后返回的图5的界面,执行下一步操作。
这里写图片描述
7.设置开始菜单中文件夹名称及快捷方式,这里我们使用默认值,如图7,按“下一步”:
这里写图片描述
8.指定安装后要运行的程序,同上用默认值并设置相关运行参数及描述,不想在安装运行任何程序,则留空即可,如图8
这里写图片描述
9.这步是有关卸载程序的相关信息,如卸载时的提示、卸载的图标等,如图9
这里写图片描述
10.勾选“保存脚本”、“转换文件路径到相关路径”及“编译脚本”,如图10
这里写图片描述

问题解决方案

1.用NSIS做安装程序,在卸载信息提示部分出现乱码
方案一
使用Notepad++编写脚本,编码格式使用ANSI
方案二
编码格式使用UTF-8(有BOM),在脚本最前面加上Unicode true
2.使用相对路径

Var PROJECT_PATH

Section “MainSection” SEC01

;获取 $INSTDIR 的上一级目录

GetFullPathName $0 ../../../

DetailPrint PROJECT_PATH

SetOutPath “$INSTDIR”

File “${PRODUCT_DIR_ROOT_NAME}\CapClient.bat”
SectionEnd

3.打包文件移除不需要的文件
这里写图片描述
移除掉Bin/Interpreter目录下的Linux,Unix目录

File /r /x “Linux” /x “Unix” “${PRODUCT_DIR_ROOT_NAME}\Bin*”

4.卸载程序检查当前程序是否在运行
下载FindProcDLL
放到C:\Program Files (x86)\NSIS\Plugins(软件的安装目录)里面

Function .onInit
FindProcDLL::FindProc “xxx.exe”
Pop $R0

IntCmp $R0 1 0 no_run

MessageBox MB_ICONSTOP “安装程序检测到 ${PRODUCT_NAME} 正在运行,请关闭之后再卸载!”

Quit
no_run:
FunctionEnd

5.检测程序多次安装,通过注册表的方式

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_ICONSTOP “检测到本机已经安装了 ${PRODUCT_NAME},请卸载后再安装”
Quit
done:
FunctionEnd

6.解决win7卸载程序快捷方式卸载不彻底
创建快捷方式时

RequestExecutionLevel user
Section -AdditionalIcons

SetShellVarContext all
CreateShortCut “$SMPROGRAMS\Capsheaf\Website.lnk” “$INSTDIR\${PRODUCT_NAME}.url”
CreateShortCut “$SMPROGRAMS\Capsheaf\Uninstall.lnk” “$INSTDIR\uninst.exe”

SectionEnd

删除快捷方式时

RequestExecutionLevel admin
Section Uninstall

SetShellVarContext all
Delete “$SMPROGRAMS\Capsheaf\Uninstall.lnk”
Delete “$SMPROGRAMS\Capsheaf\Capsheaf.lnk”

SectionEnd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值