我想在自行编写的安装程序中安装Microsoft SQL Server Native Client。数据库驱动程序将在首次启动时安装一次。在Delphi中请求驱动程序安装的管理员权限
我的问题是,在某些计算机上,如果我的程序未以管理员身份运行,则不会执行驱动程序安装。
如果我的程序没有以管理员身份运行,我在ShellExecute Admin权限中使用'runas'。出现对管理权限的请求,但是在某些计算机上未执行驱动程序的安装。
function shellExec (APath, AParameter: String) : Boolean;
rslt := ShellExecute (0, pChar('runas'), pChar(APath), pChar(AParameter), pChar(''), SW_SHOWNORMAL);
result := (rslt > 32);
end;
shellExec('msiexec.exe', '-i' + MsiInstaller + ' /qn IACCEPTSQLNCLILICENSETERMS=YES');
// MsiInstaller = Path to NativeClient-Installer
然后,我给程序提供睡眠(20000)20秒的时间,以便安装可以执行。在普通的快速计算机中,安装需要2-4秒钟,所以20秒的大小不应该成为问题。
为了清楚起见,我在文中省略了“rslt”的错误评估。当然它添加在我的代码中。但我没有收到任何错误代码。
有没有人有任何想法,当程序以管理员权限启动时,为什么安装工作,但不是当它要求管理员权限?
如果程序以管理员权限启动,则不会显示第二条消息显示驱动程序安装的管理员权限。
问:如何确保安装程序始终执行,并且我的程序不需要以管理员权限启动?
重复的话题。你可以检查你是否需要管理员权限,如果需要的话以管理员身份执行并等待安装完成... http://stackoverflow.com/questions/923350/delphi-prompt-for-uac-elevation-when-needed/28572886# 28572886 – smooty86
坏主意,安装应该在安装时不在发布期间发生。编写一个单独的安装程序(需要管理员权限),但确保实际的应用程序可以用用户权限运行。 – Remko