【问题标题】:Starting executable after NSIS installerNSIS 安装程序后启动可执行文件
【发布时间】:2011-11-14 18:14:02
【问题描述】:

在我的安装程序结束时,我想启动一个 .exe 文件,然后结束安装。我尝试了各种方法来启动这个 exe,如下所示,但没有一个是完全正确的。 .exe 文件打开登录屏幕,用户输入用户名和密码,然后启动主应用程序。

当我双击文件夹中的 .exe 时,它​​会弹出登录提示,我输入凭据,然后应用程序就会启动。在安装程序中尝试了以下方法来复制此过程:

ExecDos 异步

ExecDos::exec /NOUNLOAD /ASYNC '$Path${APP_FILE_NAME}'
Sleep 30000

执行壳

ExecShell "" '"$Path${APP_FILE_NAME}"'

ExecDos

ExecDos::exec '$Path${APP_FILE_NAME}'

nsExec

nsExec::exec '$Path${APP_FILE_NAME}'

理想情况下,我希望异步调用正常工作,以便启动登录屏幕,然后结束安装程序。

上述所有方法都按预期显示了登录屏幕,但在登录应用程序后,主应用程序只是坐在一个空白的灰色屏幕上……如果我只是双击 .exe 中的$Path文件夹并正常登录。

进行这些调用以启动 .exe 有什么问题吗?

【问题讨论】:

    标签: installation nsis


    【解决方案1】:

    问题可能出在您的应用程序上,而不是 NSIS...

    如果应用程序依赖于“正确”的工作目录,则需要先使用 SetOutPath:

    SetOutPath $INSTDIR
    ExecShell "" '"$INSTDIR\myapp.exe"'
    

    在安装程序结束时执行主应用程序是有问题的,因为它可能最终以错误用户身份运行应用程序(UAC 开启,以非管理员身份登录并以管理员用户身份提升(假设您没有设置 @ 987654322@或使用RequestExecutionLevel admin))

    【讨论】:

    • 使用ExecShell "" '...'而不是Exec '...'有什么意义吗?
    • @ChrisMorgan 在 NT6+ 上,是的,ExecShell 使用 ShellExecute(),而 Exec 使用 CreateProcess()。如果应用程序需要提升并且您尚未提升,则 CreateProcess() 失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多