NSIS 关于 uninst.exe 的签名问题

【问题描述】

uninst.exe 文件是由安装程序(setup.exe在执行安装的时候生成的。即使 setup.exe 有被签名,但是 uninst.exe 是没有签名的,导致安装程序会被安全软件(例如:360软件)拦截。

注:setup.nsi 是通过 WriteUninstaller "$INSTDIR\uninst.exe" 来生成卸载程序。


【解决方案一】

通过执行setup.exe(不要签名),先生成卸载程序,然后对卸载程序进行签名,再将卸载程序打包进setup.exe。

1)首先,由NSIS生成setup.exe,注意:不要对setup.exe进行签名。

2)执行setup.exe,待安装完成后,到安装目录找到uninst.exe,然后对uninst.exe进行签名。

3)uninst.exe文件与需要被释放到安装目录下的文件一起打包。

4)注释掉setup.nsi文件中的这句:WriteUninstaller "$INSTDIR\uninst.exe"。

5)重新编译setup.nsi生成setup.exe,并对其进行签名。


【解决方案二】

整体思路跟方案一类似,就是在编译的时候生成卸载程序(uninst.exe),然后再打包到setup.exe中!但是是通过代码方式:

1)新建一个nsis工程uninstall.nsi。把setup.nsi里面的Function un.XX,都移到uninstall.nsi中去。

2)uninstall.nsi 的 section install中只保留:WriteUninstaller "$EXEDIR\uninst.exe" ;与setup.exe同目录

3)添加以下代码:

        ShowInstDetails hide ; 设置是否显示安装详细信息nevershow
        ShowUninstDetails hide ; 设置是否显示卸载详细信息nevershow
        SilentInstall silent ; 静默安装
        ;SilentUnInstall silent ; 静默卸载

4)编译uninstall.nsi,并运行,就会在当前目录下生成uninst.exe。然后给它签名。  

5)把生成的uninst.exe打包到setup.exe中,同时去掉:WriteUninstaller "$INSTDIR\uninst.exe"

6)setup.nsi中,用包含dll的方法包含uninst.exe文件。           

注意:事先生成uninst.exe有一个问题,就是安装路径。如果是用户选择安装路径,生成uninst.exe的时候就不知道安装路径具体的值。即使是不让用户选择安装路径,不同系统上路径也会不一样的。所以uninst.exe点击卸载的时候就找不到正确的安装路径。解决方法:通过在setup.nsi把安装路径写入指定的注册表路径中的,uninst.exe通过访问注册表获取安装路径。


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值