2013-12-09 74 views
1

如何在安裝期間強制Inno安裝程序顯示UAC提示,如果需要提升特權才能運行特定安裝程序?跳過安裝此安裝程序並不重要。我發現我可以指定AfterInstall函數來測試是否需要特權提升(IsAdminLoggedOn()),但是如何顯示UAC提示符以特定用戶身份運行此安裝程序?Force Inno安裝程序在安裝過程中顯示UAC提示

+1

你不得不重新運行安裝程序,並要求記住什麼用戶在嚮導的步驟已經被選中。在['這個問題']中提到了非常相似的東西(http://stackoverflow.com/q/20197554/960757)。 – TLama

+0

我的情況完全不同。沒有必要重新啓動整個設置。我只想在安裝時使用提升的權限運行特定的.exe。你上面提到的關於'runas'的提議幫助了我。謝謝! – Megamozg

回答

0

找到解決方案。所以,如果你需要你的安裝過程中運行使用提升的權限特定installator你需要:

  1. 指定Files節你installator如下:

    [Files] 
    Source: "SomeSetup.exe"; DestDir: "{tmp}"; AfterInstall: SomeSetupAfterInstall() 
    
  2. Code節中,您應定義SomeSetupAfterInstall()。在那裏你應該使用runas動詞使用ShellExec運行你的安裝者,如果它不是管理員啓動的設置。這可能是這樣的:

    procedure SomeSetupAfterInstall(); 
    var 
        ErrorCode: Integer; 
        TmpPath: String; 
        RunMethod: String; 
    begin 
        TmpPath:=ExpandConstant('{tmp}'); 
        if not IsAdminLoggedOn() then 
        begin 
         RunMethod := 'runas'; 
        end else 
        begin 
         RunMethod := ''; 
        end; 
        ShellExec (RunMethod, TmpPath + '\SomeSetup.exe', '', '', 
           SW_SHOW, ewWaitUntilTerminated, ErrorCode); 
    end; 
    
+0

我認爲這意味着您正在使用'PrivilegesRequired = lowest'運行您自己的設置。因爲否則上述將不是必需的。 (不要忘記,用戶可能會取消提升,或無法提升,因此您的應用程序將需要優雅地處理此組件不存在。) – Miral

+0

是的。重點是允許非管理用戶安裝應用程序,但沒有某些特定功能。 – Megamozg

相關問題