【发布时间】:2016-02-26 10:12:23
【问题描述】:
我想在自己编写的安装程序中安装 Microsoft SQL Server Native Client。数据库驱动程序将在首次启动时安装一次。
我的问题是在某些计算机上,如果我的程序没有以管理员身份运行,驱动程序安装不会执行。
如果我的程序没有以管理员身份运行,我会在 ShellExecute 管理员权限中获得“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
然后我给程序加上 Sleep (20000) 20 秒的时间,这样就可以进行安装了。在普通的快速计算机中,安装需要 2-4 秒,因此大尺寸的 20 秒应该不是问题。
为了清楚起见,我在帖子中省略了“rslt”的错误评估。当然,它已添加到我的代码中。但我没有收到任何错误代码。
有没有人知道为什么当程序以管理员权限启动时安装工作正常,但在它自己请求管理员权限时却不行?
如果程序以管理员权限启动,则不会显示有关驱动程序安装的管理员权限的第二条消息。
问题:如何确保安装程序始终执行,并且我的程序不需要以管理员权限启动?
【问题讨论】:
-
重复主题。您可以检查您是否需要管理员权限,如果需要以管理员身份执行并等待安装完成...stackoverflow.com/questions/923350/…
-
坏主意,安装应该在安装时发生,而不是在启动期间。编写一个单独的安装程序(需要管理员权限),但要确保实际应用程序可以使用用户权限运行。
标签: delphi shellexecute silent-installer admin-rights