2

我制作了一个 NSIS 脚本,其中包含将我的可执行文件打包到一个文件中的内容。它工作正常。正在玩一些命令行选项,当然还计划签署卸载程序。

这是脚本的片段,我不明白为什么这不起作用。

Function .onInit

!ifdef GEN_ONLY_UNINSTALLER
WriteUninstaller "out\uninst.exe"
Quit
!endif

FunctionEnd

使用此命令行选项时:

makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi

它不会编写卸载程序并退出。我在这里想念什么?应该WriteUninstaller去哪里?我怀疑我没有在正确的地方调用它。:)

4

2 回答 2

4

您只完成了一半的工作,您需要执行生成的安装程序才能执行 WriteUninstaller 调用。

要获得卸载程序,您可以签名,您必须:

  1. 在特定于卸载程序的 .nsi 上运行 makensis
  2. 相同的 .nsi!system在自身上执行 makesis /Dmysymbol(将退出代码与 0 比较)
  3. 用于!system执行步骤 2 中生成的安装程序(WriteUninstaller 现在将编写卸载程序)
  4. !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 实例不会生成有效的安装程序,这通常不是问题,因为此代码可以添加到创建真正安装程序的脚本中......(完整的脚本将生成卸载程序,签名,生成安装程序,然后签名)

于 2012-06-11T14:40:14.240 回答
1

这不是你想的那样:o)

您所写的是您正在创建一个安装程序,该安装程序将在其启动期间创建(或不创建,取决于ifdef)卸载程序(onInit安装程序入口点)。

于 2012-06-11T14:07:17.243 回答