Freunde der Sonne, ich habe ein Problem.
Ich möchte in einem selbstgeschriebener Installer den Microsoft
SQL-Server Native Client installieren. Der Datenbank-Treiber soll beim ersten Starten einmalig installiert werden.
Mein Problem dabei ist, dass auf manchen Rechnern die Installation des Treibers nicht durchgeführt wird, wenn mein Programm nicht als Administrator ausgeführt wird.
Wenn mein Programm nicht als Administrator ausgeführt wird, hole ich mir per 'runas' im ShellExecute Adminrechte. Die Anfrage nach Adminrechten erscheint auch, allerdings passiert danach anscheinend nichts mehr.
Delphi-Quellcode:
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 ist der Pfad zum NativeClient-Installer
Danach gebe ich dem Programm mittels Sleep(20000) 20 Sekunden Zeit, damit die Installation durchgeführt werden kann. Auf normal schnellen Rechnern dauert die Installation 2-4 Sekunden, sodass die großzügig dimensionierten 20 Sekunden kein Problem sein dürften, bevor es weiter geht.
Aus Gründen der Übersicht habe ich die Fehlerauswertung aus "rslt" hier im Post weggelassen. Daran liegt es nicht, ich bekomme keinen Errorcode zurück.
Hat irgendwer eine Idee, warum die Installation funktioniert, wenn das Programm mit Adminrechten gestartet wird, aber nicht wenn es die Adminrechte selbst anfordert?
Wenn das Programm mit Adminrechten gestartet wird, kommt keine zweite Meldung das Adminrechte angefordert werden für die Treiberinstallation.
Frage: Was muss ich tun, damit der Installer immer ausgeführt wird und mein Programm nicht mit Adminrechten gestartet werden muss.
Gruß und Kuss