Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
makensis似乎不适用于/D命令行选项_Nsis - Fatal编程技术网

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

makensis似乎不适用于/D命令行选项,nsis,Nsis,我制作了一个NSIS脚本,其中包含将可执行文件打包到单个文件的内容。它很好用。他在玩命令行选项很少的游戏,当然还计划签署卸载程序 这是脚本的片段,我不明白为什么这不起作用 Function .onInit !ifdef GEN_ONLY_UNINSTALLER WriteUninstaller "out\uninst.exe" Quit !endif FunctionEnd 使用此命令行选项时: makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_on

我制作了一个NSIS脚本,其中包含将可执行文件打包到单个文件的内容。它很好用。他在玩命令行选项很少的游戏,当然还计划签署卸载程序

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

Function .onInit

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

FunctionEnd
使用此命令行选项时:

makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi
它不会写入卸载程序并退出。我错过了什么?
WriteUninstaller
应该放在哪里?我怀疑我说得不对

这不是你想的那样:o)


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

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

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

  • 在特定于卸载程序的.nsi上运行makensis
  • nsi使用
    执行makensis/Dmysymbol!系统本身
    (将退出代码与0进行比较)
  • 使用
    !系统
    执行步骤2中生成的安装程序(WriteUninstaller现在将编写卸载程序)
  • !步骤2中生成的delfile
    安装程序
  • 大致如下:

    !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实例不会生成有效的安装程序,这通常不是问题,因为此代码可以添加到创建真正安装程序的脚本中。。。(完整脚本将生成卸载程序,对其进行签名,生成安装程序,然后进行签名)

    当您为MAKENSIS定义GEN_ONLY_卸载程序时,将在运行使用/DGEN_ONLY_卸载程序编译的安装程序时创建卸载程序。通过使用makensis的
    /D
    ,您不需要运行脚本,只需使用定义编译它。只有通过运行编译后的安装程序才能得到结果。