Permissions Inno安装程序ShellExec权限
我有一个InnoSetup项目,它在使用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
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等等,这使它成为最简单的路线。