uninst.exe文件是安装时setup.exe程序生成的,所以在线上机器编译的时候不好签名。
所以uninst.exe必须是在编译的时候就生成了,然后打包到setup.exe中,而不用setup.exe自动生成了。
现在的问题:
(1) 如何在编译的时候生成uninst.exe
可以新建一个nsis工程uninstall.nsi。把setup.nsi里面的Function un.XX,都移到uninstall.nsi中去。
section install中只保留:
WriteUninstaller "$INSTDIR\Uninst.exe"
注意添加静态安装:SilentInstall silent
同时: ShowInstDetails hide \n ShowUninstDetails hide。
编译uninstall.nsi,并运行,就会静态的在制定的目录下生成了uninst.exe。然后签名它。
(2) 如何把生成的uninst.exe打包到setup.exe中
setup.nsi中,用包含dll的方法包含uninst.exe文件,同时去掉:
WriteUninstaller "$INSTDIR\uninst.exe"
(3) 事先生成uninst.exe有一个问题,就是安装路径。如果是用户选择安装路径,生成uninst.exe的时候就不知道安装路径具体的值。
即使是不让用户选择安装路径,不同系统上路径也会不一样的。所以uninst.exe点击卸载的时候就找不到正确的安装路径。
解决方法:通过在setup.nsi把安装路径写入指定的注册表路径中的,uninst.exe通过访问注册表获取安装路径。