2013-12-09 49 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

相关问题