在我的安装程序结束时,我想启动一个.exe文件,然后结束安装.我已经尝试了各种方法来启动这个exe,如下所示,但它们都没有完全正确..exe文件显示登录屏幕,用户输入用户名和密码,并启动主应用程序.
当我双击文件夹中的.exe时,它会显示登录提示,我输入凭据,然后应用程序启动.在安装程序中尝试了以下方法来复制此过程:
ExecDos异步
ExecDos::exec /NOUNLOAD /ASYNC '$Path${APP_FILE_NAME}'
Sleep 30000
Run Code Online (Sandbox Code Playgroud)
ExecShell
ExecShell "" '"$Path${APP_FILE_NAME}"'
Run Code Online (Sandbox Code Playgroud)
ExecDos
ExecDos::exec '$Path${APP_FILE_NAME}'
Run Code Online (Sandbox Code Playgroud)
nsExec
nsExec::exec '$Path${APP_FILE_NAME}'
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想让异步调用工作,这样它就会启动登录屏幕然后结束安装程序.
所有上述方法都按预期显示登录屏幕,但登录到应用程序后,主应用程序只是位于一个空白的灰色屏幕上......如果我只是双击$ Path文件夹中的.exe,我就看不到了并正常登录.
这些调用启动.exe是否有问题?
问题可能出在你的应用上,而不是NSIS ......
如果应用程序依赖于"正确"的工作目录,则需要首先使用SetOutPath:
SetOutPath $INSTDIR
ExecShell "" '"$INSTDIR\myapp.exe"'
Run Code Online (Sandbox Code Playgroud)
在安装程序结束时执行主应用程序是有问题的,因为它最终可能会以错误的用户身份运行应用程序(UAC打开,以非管理员身份登录并使用管理员用户提升(假设您未设置RequestExecutionLevel或使用RequestExecutionLevel admin))