2011-11-14 116 views
3

在我的安装程序结束后,我要开始一个.exe文件,然后结束安装。我已经尝试过各种方式来启动这个exe文件,如下所示,但没有一个是非常正确的。 .exe文件启动登录屏幕,用户输入用户名和密码,然后启动主应用程序。开始执行NSIS安装

当我双击该文件夹中的.exe文件,它带来了登录提示,我把凭据,并在应用程序启动。下面的方法在安装程序中试图复制这一过程:

ExecDos异步

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

ExecShell

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

ExecDos

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

nsExec

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

理想情况下,我想获得异步调用工作,所以它会揭开序幕的登录画面,然后结束安装程序。

所有上述方法表现为预期的登录画面,但登录到应用程序后,主应用程序只是坐在一个空白的灰色屏幕上......这是我不明白,如果我只需双击该.exe中$ Path文件夹并正常登录。

是不是有什么毛病让这些电话开始的。exe?

回答

6

这个问题可能是您的应用程序,而不是NSIS ...

如果应用程序取决于你需要先使用SetOutPath“正确的”工作目录:

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

执行主应用程序在安装程序的最后是有问题的,因为它最终可能会以错误的用户身份运行应用程序(UAC,以非管理员身份登录并与管理员用户提升(假设您未设置RequestExecutionLevel或使用了RequestExecutionLevel admin))

+0

做usi ng'ExecShell“”'...''而不是'Exec'...''有什么意义? –

+1

@ChrisMorgan在NT6 +,是的,ExecShell使用的ShellExecute()和Exec使用的CreateProcess()。如果应用程序需要提升并且您尚未提升,则CreateProcess()失败。 – Anders

+0

谢谢!这就说得通了。 –