根据运行时条件以管理员身份运行安装程序

时间:2014-04-09 14:59:19

标签: inno-setup uac shellexecute runas

我有一个InnoSetup安装程序,通常可以作为非管理员运行,但在某些情况下,如果满足条件,它需要以提升的权限运行。因此,我将PrivilegesRequired设置为lowest以确保在不需要时不显示UAC提示,如果条件满足,我会尝试像管理员一样重新启动它:

if not ShellExec('runas', ExpandConstant('{srcexe}'), GetCmdTail(), '', SW_HIDE, ewNoWait, errorCode) then begin
  MsgBox(SysErrorMessage(errorCode), mbError, MB_OK);
end;

但它始终失败,错误5:拒绝访问。

显然不是因为我无法使用runas动词:使用该动词运行另一个可执行文件正常,并显示UAC提示符。我还尝试将setup.exe复制到临时目录并从那里运行,但复制失败。

如何以管理员身份重启我的设置?

1 个答案:

答案 0 :(得分:1)

这是ShellExec功能的限制。 explicitly compares如果您要执行的文件不是安装程序本身,如果是,则it fails使用ERROR_ACCESS_DENIED。因此,您无法使用ShellExec函数运行安装程序。

this post中,我必须使用ShellExecute Windows API函数来解决此限制,您也可以这样做。