【问题标题】:NSIS ExecWait not launching secondary installerNSIS ExecWait 未启动辅助安装程序
【发布时间】:2015-12-13 13:49:51
【问题描述】:

我有一个基本的 NSIS 安装程序,它应该像这样调用辅助 - 非 NSIS 安装程序:

Section "Install First" SEC01
    File "WindowsPathToFile\setup.exe"
    DetailPrint "Installing the first Thing"
    ExecWait '"$INSTDIR\setup.exe"'
SectionEnd

NSIS 和安装程序不会抛出任何错误 - 但是子安装程序永远不会启动或执行(并且应用程序永远不会安装)。

请注意,如果我在批处理脚本中调用“setup.exe”并启动批处理脚本,这确实有效。我只是希望有一些更优雅的东西(不显示命令提示符),因为我将有几个需要调用的自定义安装程序。

我认为“ExecWait Doesn't Wait”中详述的 ExecWait 链问题不会影响我,因为我认为我的 (setup.exe) 安装程序不会提取辅助安装程序。

setup.exe 安装程序是由 LabVIEW 创建的,我没有找到关于它在幕后做什么的好信息。

我在这里遗漏了什么吗?还是我只需要坚持使用批处理脚本?

【问题讨论】:

    标签: nsis


    【解决方案1】:

    辅助安装程序是否需要提升?您的 .nsi 中有 RequestExecutionLevel admin 吗?

    ExecWait 内部调用CreateProcess Windows API 函数,如果子进程需要通过 UAC 提升,它将失败。

    如果您要执行需要提升的子进程,那么通常建议您的安装程序也需要提升。如果您出于某种原因不想这样做,那么您可以使用ShellExecWait${StdUtils.ExecShellWaitEx}

    【讨论】:

    • 我的辅助安装程序确实需要提升。我发现了第一个错误:当我更改它时,我使用的是 RequestExecutionLevel user 而不是 admin 我现在有一个新问题:当 NSIS 安装程序调用新的安装程序时,它会出错: .\ConfigInfo.cpp(3266): InstallerError 11005 致命错误。找不到初始化文件。找不到文件 C:\setup.ini。 我怀疑这是一个路径问题,但至少现在它似乎在做某事......谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多