我想在自己编写的安装程序中安装 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”的错误评估。当然,它已添加到我的代码中。但我没有收到任何错误代码。
有没有人知道为什么当程序以管理员权限启动时安装工作正常,但在它自己请求管理员权限时却没有?
如果程序以管理员权限启动,则不会为驱动程序安装的管理员权限显示第二条消息。
问题:如何确保安装程序始终执行,并且我的程序不需要以管理员权限启动?