Inno设置ShellExec权限

时间:2014-04-14 19:40:36

标签: permissions inno-setup shell-exec

我有一个InnoSetup项目,当它完成ShellExec时启动一个应用程序。问题是我的安装程序在启动时会升级,但我希望我启动的应用程序运行非升级。这有可能吗?

procedure LaunchApplication(shortcut: String);
var
  ErrorCode: Integer;
begin
  ShellExec('', ExpandConstant('{userprograms}\' + shortcut),'', '', SW_SHOW, ewNoWait, ErrorCode);
end;

2 个答案:

答案 0 :(得分:2)

这里我假设你正在使用

[Setup]
PrivilegesRequired=admin

提升安装程序(UAC)

要以非提升模式运行任何程序,请使用 ExecAsOriginalUser 功能:

  

原型:

     

function ExecAsOriginalUser(const Filename,Params,WorkingDir:   串; const ShowCmd:整数; const等待:TExecWait; var ResultCode:   整数):布尔值;说明:

     

使用(正常情况下)执行指定的可执行文件或批处理文件   最初启动安装程序的用户的凭据(非提升)。   有关更多信息,请参阅Exec和[Run]部分标志runasoriginaluser   信息。备注:

     

卸载时不支持此功能。

     

在非常不寻常的故障情况下(例如,如果初始安装过程死亡   意外地),此函数可能引发异常   而不只是返回False。

答案 1 :(得分:1)

如果您使用带有[Run]标记的postinstall条目(以便在“完成”页面上显示一个复选框),则运行非提升是默认行为。 (您也可以使用postinstall标志为非runasoriginaluser条目设置此项。)

但请注意,如果安装程序最初是从提升的上下文运行(例如,提升的命令),那么这个和ExecAsOriginalUser函数等都不会保证它们运行非提升 - 提示,另一个提升的安装程序,或用户右键单击以管理员身份运行),然后“原始用户”也是提升用户。但在这些情况下,您可以假设用户正在获得他们要求的内容。