2013-05-15 31 views
9

我啓動我的Windows應用程序,這樣在安裝完成後:如何正確啓動安裝結束時的可執行文件?

!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication" 

... 

Function LaunchApplication 
    ExecShell "" "$INSTDIR\Application.exe" 
FunctionEnd 

但是,這有一個奇怪的和不想要的副作用。顯然,我的應用程序是以管理員權限啓動的。

我不能拖&下降網頁瀏覽器(Firefox和IE測試)和我的應用程序之間的所有數據。

如果我辭掉應用程序(會話從NSIS開始),並從開始菜單圖標一切正常重新啓動! - 我可以將&拖放到瀏覽器中而沒有問題。

所以我懷疑,因爲在安裝開始時有一個UAC的請求,不知何故UAC權轉讓給我安裝後啓動過程。由於瀏覽器在安全性較低的過程中運行,Windows拒絕用它們傳播任何數據(在使用NSIS啓動的流程實例中)。

如何從NSIS啓動一個EXE文件,這樣UAC /安全問題就不會發生?

+0

你是正確的注意到,升級的進程會自動啓動其他進程提升。自從UAC在Vista中引入後,這種行爲就已經存在(並且讓用戶惱火)。除非設置了某些註冊表項,否則系統會阻止未升級和已升級應用程序之間的數據傳輸。 – EricLaw

回答

0

兩者Exec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'

試試這個:

!define MUI_FINISHPAGE_RUN "$INSTDIR\Application.exe" 
!insertmacro MUI_PAGE_FINISH 

OR

Function .oninstsuccess 
Exec "$INSTDIR\Application.exe" 
FunctionEnd 
+1

你甚至讀過這個問題嗎? – Anders

3

UAC plugin可以用來解決這個問題,但它是一個有點很難使用。您也可以嘗試ShellExecAsUser,但我會建議您根本不要使用運行復選框...

+0

它看起來像UAC插件不再可用!我首先在腳本中使用它來完成高程。我的想法是嘗試在.oninstsuccess中取消升級,但我不知道如何去做,而且由於插件的網頁已經消失(顯然已被劫持),我不知道如何取消升級。 – Casady

+1

有人與維基搞混了,現在修好了。如果將來發生的話,您可以隨時訪問wiki頁面的舊版本... – Anders

+0

感謝您的恢復!我已經下載了最新版本(我的是2歲以上),但是Unicode版本已經丟失!? (我正在使用)。另外,對於我的另一個問題 - 是否有使用UAC插件在.oninstsuccess中取消升級(回到用戶級別)? – Casady

6

我推薦使用Anders提到的插件ShellExecAsUser。我用它這樣此相同的目的:

!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication 

... 

Function LaunchApplication 
    SetOutPath $INSTDIR 
    ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Application.exe" "" 
FunctionEnd 

的使用注意事項SetOutPath,確保Application.exe與安裝文件夾開始,因爲它是當前目錄。 ShellExecAsUser不設置此。

相關問題