2011-11-14 114 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

謝謝!這就說得通了。 –