我有一个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复制到临时目录并从那里运行,但复制失败。
如何以管理员身份重启我的设置?
答案 0 :(得分:1)
这是ShellExec
功能的限制。 explicitly compares
如果您要执行的文件不是安装程序本身,如果是,则it fails
使用ERROR_ACCESS_DENIED
。因此,您无法使用ShellExec
函数运行安装程序。
在this post
中,我必须使用ShellExecute
Windows API函数来解决此限制,您也可以这样做。