2014-04-09 34 views
1

我有一個InnoSetup安裝程序,通常可以以非管理員身份運行,但在某些情況下,如果滿足條件,需要使用提升的特權運行。所以我設置PrivilegesRequiredlowest,以確保它不會顯示UAC提示不需要時,如果條件滿足,我試圖重新啓動它爲管理員這樣的:基於運行時條件以管理員身份運行安裝程序

if not ShellExec('runas', ExpandConstant('{srcexe}'), GetCmdTail(), '', SW_HIDE, ewNoWait, errorCode) then begin 
    MsgBox(SysErrorMessage(errorCode), mbError, MB_OK); 
end; 

但總是失敗,錯誤5:訪問被拒絕。

顯然這不是因爲我不能使用runas動詞:用該動詞運行另一個可執行文件可以正常工作,並顯示UAC提示。我也嘗試將setup.exe複製到臨時目錄並從那裏運行,但複製失敗。

如何以管理員身份重新啓動設置?

+0

[Make InnoSetup安裝程序請求特權提升只在需要時纔可能重複](http://stackoverflow.com/questions/21556853/make-innosetup-installer-request-privileges-elevation-only-when-needed) –

回答

1

這是ShellExec函數的限制。它explicitly compares如果您要執行的文件不是安裝程序本身,如果是,it failsERROR_ACCESS_DENIED。所以,你只能用ShellExec函數運行安裝程序。我不得不使用ShellExecute Windows API函數來解決這個限制,你也可以這樣做。

+0

謝謝,我會試試你的解決方法 –

+0

不客氣! – TLama

+0

它的工作,謝謝!然而,我的問題顯然是重複的,我應該關閉它... –