【问题标题】:makensis does not seem to work with /D command line optionmakensis 似乎不适用于 /D 命令行选项
【发布时间】:2012-06-14 08:45:25
【问题描述】:

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

这是脚本的 sn-p,我不明白为什么这不起作用。

Function .onInit

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

FunctionEnd

使用此命令行选项时:

makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi

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

【问题讨论】:

  • 当您为 MAKENSIS 定义 GEN_ONLY_UNINSTALLER 时,将在您运行使用 /DGEN_ONLY_UNINSTALLER 编译的安装程序时创建卸载程序。通过使用/D 进行makensis,您不会运行脚本,而只需在定义定义的情况下编译它。只有运行编译好的安装程序才能得到结果。

标签: nsis


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这不是你想的那样:o)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多