2014-04-09 27 views
1

我有一个InnoSetup安装程序,通常可以以非管理员身份运行,但在某些情况下,如果满足条件,需要使用提升的特权运行。所以我设置PrivilegesRequiredlowest,以确保它不会显示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

[Make InnoSetup安装程序请求特权提升只在需要时才可能重复](http://stackoverflow.com/questions/21556853/make-innosetup-installer-request-privileges-elevation-only-when-needed) –

回答

1

这是ShellExec函数的限制。它explicitly compares如果您要执行的文件不是安装程序本身,如果是,it failsERROR_ACCESS_DENIED。所以,你只能用ShellExec函数运行安装程序。我不得不使用ShellExecute Windows API函数来解决这个限制,你也可以这样做。

+0

谢谢,我会试试你的解决方法 –

+0

不客气! – TLama

+0

它的工作,谢谢!然而,我的问题显然是重复的,我应该关闭它... –