我制作了一个带有内容的NSIS脚本,将我的可执行文件打包到一个文件中。它工作正常。正在玩几个命令行选项,当然还计划签署卸载程序。
这是脚本的片段,我不明白为什么这不起作用。
Function .onInit
!ifdef GEN_ONLY_UNINSTALLER
WriteUninstaller "out\uninst.exe"
Quit
!endif
FunctionEnd
使用此命令行选项时:
makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi
它不会写入卸载程序并退出。我在这里错过了什么?
WriteUninstaller
应该去哪儿?我怀疑我没有把它称为正确的地方。 :)
答案 0 :(得分:4)
您只执行了一半的工作,您需要执行生成的安装程序以执行WriteUninstaller调用。
要获得卸载程序,您可以签名,您必须:
!system
(比较退出代码为0)!system
执行步骤2中生成的安装程序(WriteUninstaller现在将编写卸载程序)!delfile
在第2步中生成的安装程序大概是这样的:
!ifdef STEP2
Function .onInit
WriteUninstaller "out\uninst.exe"
Quit
FunctionEnd
Outfile "$%temp%\genun.exe"
Section
SectionEnd
!else
!system '"makensis" /DSTEP2 "${__FILE__}"' = 0
!system '"$%temp%\genun.exe" /S'
!delfile "$%temp%\genun.exe"
!endif
此脚本将失败并显示错误,因为初始makensis实例不会生成有效的安装程序,这通常不是问题,因为此代码可以添加到创建真实安装程序的脚本中...(完整脚本将生成卸载程序,对其进行签名,生成安装程序,然后对其进行签名
答案 1 :(得分:1)
这不符合您的想法:o)
您所写的是您正在创建一个安装程序,该安装程序将在启动期间创建(或不,取决于ifdef
)卸载程序(onInit
是安装程序切入点)。