我有一个InnoSetup项目,当它完成ShellExec
时启动一个应用程序。问题是我的安装程序在启动时会升级,但我希望我启动的应用程序运行非升级。这有可能吗?
procedure LaunchApplication(shortcut: String);
var
ErrorCode: Integer;
begin
ShellExec('', ExpandConstant('{userprograms}\' + shortcut),'', '', SW_SHOW, ewNoWait, ErrorCode);
end;
答案 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
函数等都不会保证它们运行非提升 - 提示,另一个提升的安装程序,或用户右键单击以管理员身份运行),然后“原始用户”也是提升用户。但在这些情况下,您可以假设用户正在获得他们要求的内容。