Installation 在安装过程中强制Inno安装程序显示UAC提示

Installation 在安装过程中强制Inno安装程序显示UAC提示,installation,inno-setup,privilege-elevation,Installation,Inno Setup,Privilege Elevation,如果在安装过程中运行特定安装程序需要提升权限,如何强制Inno安装程序显示UAC提示?跳过安装此安装程序并不重要。我发现我可以指定AfterInstall函数来测试是否需要特权提升,但如何显示UAC提示以特定用户身份运行此安装程序?找到了解决方案。因此,如果在安装过程中需要以提升的权限运行特定的installator,则需要: 在“文件”部分指定安装程序,如下所示: [Files] Source: "SomeSetup.exe"; DestDir: "{tmp}"; AfterInstall:

如果在安装过程中运行特定安装程序需要提升权限,如何强制Inno安装程序显示UAC提示?跳过安装此安装程序并不重要。我发现我可以指定AfterInstall函数来测试是否需要特权提升,但如何显示UAC提示以特定用户身份运行此安装程序?

找到了解决方案。因此,如果在安装过程中需要以提升的权限运行特定的installator,则需要:

在“文件”部分指定安装程序,如下所示:

[Files]
Source: "SomeSetup.exe"; DestDir: "{tmp}"; AfterInstall: SomeSetupAfterInstall()
在代码部分,您应该在安装后定义一些setupafterinstall。如果安装程序不是管理员启动的,那么应该使用ShellExec运行带有runas谓词的安装程序。可能是这样的:

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;

您必须重新运行安装程序,这需要记住在向导步骤中已选择的用户。有人问了一个非常相似的问题,我的情况完全不同。无需重新启动整个安装程序。我只想在安装过程中以提升的权限运行特定的.exe。你在上面提到的关于所讨论的符文的建议帮助了我。非常感谢。我假设这意味着您正在运行自己的安装程序,PrivilegesRequired=最低。因为否则就没有必要进行上述操作。不要忘记,用户可能会取消提升,或者无法提升,因此您的应用程序需要优雅地处理此组件不存在。是的。关键是允许非管理用户安装应用程序,但不具有某些特定功能。