makensis似乎不适用于/ D命令行选项

时间:2012-06-11 12:35:16

标签: nsis

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

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

Function .onInit

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

FunctionEnd

使用此命令行选项时:

makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi

它不会写入卸载程序并退出。我在这里错过了什么? WriteUninstaller应该去哪儿?我怀疑我没有把它称为正确的地方。 :)

2 个答案:

答案 0 :(得分:4)

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

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

  1. 在卸载程序特定的.nsi
  2. 上运行makensis
  3. 同样的.nsi自己执行makensis / Dmysymbol !system(比较退出代码为0)
  4. 使用!system执行步骤2中生成的安装程序(WriteUninstaller现在将编写卸载程序)
  5. !delfile在第2步中生成的安装程序
  6. 大概是这样的:

    !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安装程序切入点)。