Microsoft SQL Server Native Client を自作のインストーラーでインストールしたいと考えています。データベース ドライバは、最初の起動時に 1 回インストールされます。
私の問題は、一部のコンピューターでは、プログラムが管理者として実行されていない場合、ドライバーのインストールが実行されないことです。
プログラムが管理者として実行されていない場合、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
次に、プログラムにスリープ (20000) を 20 秒間与えて、インストールを実行できるようにします。通常の高速コンピュータでは、インストールに 2 ~ 4 秒かかるため、余裕のある 20 秒は問題になりません。
わかりやすくするために、この投稿では「rslt」のエラー評価を省略しています。もちろん、それは私のコードに追加されています。しかし、私はエラーコードを取得しません。
プログラムが管理者権限で起動されたときにインストールが機能するのに、管理者権限自体を要求しているときにインストールが機能しない理由を知っている人はいますか?
プログラムが管理者権限で開始された場合、ドライバー インストールの管理者権限に関する 2 番目のメッセージは表示されません。
質問: インストーラーが常に実行され、管理者権限でプログラムを起動する必要がないようにするにはどうすればよいですか?