Permissions Inno安装程序ShellExec权限

Permissions Inno安装程序ShellExec权限,permissions,inno-setup,shell-exec,Permissions,Inno Setup,Shell Exec,我有一个InnoSetup项目,它在使用ShellExec完成时启动应用程序。问题是我的安装程序启动时会升级,但我希望我启动的应用程序运行非升级。这有可能吗 procedure LaunchApplication(shortcut: String); var ErrorCode: Integer; begin ShellExec('', ExpandConstant('{userprograms}\' + shortcut),'', '', SW_SHOW, ewNoWait, Erro

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

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

这里我假设您正在使用

[Setup]
PrivilegesRequired=admin
提升安装程序(UAC)

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

原型:

函数ExecAsOriginalUser(常量文件名、参数、工作目录: 字符串;const ShowCmd:Integer;const Wait:TExecWait;var ResultCode: 整数):布尔值;说明:

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

卸载时不支持此功能

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


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


但是请注意,此功能和
ExecAsOriginalUser
功能等都不能保证它们运行非提升的功能——如果安装程序最初是从提升的上下文运行的(例如,提升的命令提示符、另一个提升的安装程序或用户右键单击以管理员身份运行),则“原始用户”也是提升的用户。但是在这些情况下,您可以假设用户得到了他们想要的。

您的意思是您的安装程序在提升(管理员)模式下运行-对吗?或者我的安装程序升级是什么意思?似乎OP可能正在打开一个快捷方式(可能是一个*.lnk文件;我知道这很奇怪,但可能只是参数的一个坏名称)。如果是这样,则必须使用
ShellExecAsOriginalUser
。这正是我所需要的。我以前看过,但忘了。我正在启动一个lnk文件。它可能有点非传统,但它是一个Silverlight应用程序,因此快捷方式包含id等等,这使它成为最简单的路线。