Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Problem mit Anforderung von Administratorrechten für Treiberinstallation (https://www.delphipraxis.net/188380-problem-mit-anforderung-von-administratorrechten-fuer-treiberinstallation.html)

machstuhl 26. Feb 2016 09:50

Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
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

Sir Rufo 26. Feb 2016 09:57

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Hmmm, bei einem MSI-Paket ist es gar nicht erforderlich das mit Adminrechten zu starten, das wird dort quasi von selber geregelt, bzw. es kann von aussen erzwungen werden:
Msiexec - To use the administrative installation option

taveuni 26. Feb 2016 10:02

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Definiere "selbstgeschriebener Installer". Wenn es einfach eine Applikation von Dir ist füge im Manifest Administrator required hinzu.

Zitat:

Zitat von machstuhl (Beitrag 1331436)
Frage: Was muss ich tun, damit der Installer immer ausgeführt wird und mein Programm nicht mit Adminrechten gestartet werden muss.

Das wäre dann die Quadratur des Kreises? Du schreibst ja oben dass er eben Administrator Rechte braucht.

Sir Rufo 26. Feb 2016 11:05

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Man kann ein MSI Paket auch als Nicht-Administrator starten. Der MSI-Installer fordert dann schon die nötigen Rechte an.

Es gibt aber auch MSI-Pakete die nur für den Benutzer installiert werden können. Dort wird der /a Parameter benötigt, damit das global installiert wird. Die Administrator Anforderung erledigt aber der MSI-Installer selber.

machstuhl 26. Feb 2016 11:19

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Danke für das fixe Feedback.

Ich habe nun diverse Parameter für "msiexec" ausprobiert.
Unter anderem: /a ' + MsiInstaller + ' /qn /L* logfile.txt IACCEPTSQLNCLILICENSETERMS=YES'
Das führt dazu, dass der Installer nicht ausgeführt wird.
In meinen Testfällen wird der Installer nur ausgeführt wenn ich die Parameter mit -i oder /i beginne.

Und auch 'Runas' habe ich durch 'Open' im ShellExecute getauscht. Bringt beides nichts. Soweit ich sehe, fordert das 'Runas' Administrator-Rechte für "msiexec.exe" an. Die Frage ist, warum bringt das nichts?

Zitat:

Zitat von taveuni (Beitrag 1331438)
Definiere "selbstgeschriebener Installer". Wenn es einfach eine Applikation von Dir ist füge im Manifest Administrator required hinzu.

Zitat:

Zitat von machstuhl (Beitrag 1331436)
Frage: Was muss ich tun, damit der Installer immer ausgeführt wird und mein Programm nicht mit Adminrechten gestartet werden muss.

Das wäre dann die Quadratur des Kreises? Du schreibst ja oben dass er eben Administrator Rechte braucht.

Beim ersten Start des Programms soll vor dem Ausführen des Native-Client-Installers Administrator-Rechte angefordert werden, damit die Installation gelingt.

Wenn ich "Administrator" ins Manifest einfügen würde, würde jedesmal das Programm als Admin gestartet. Das möchte aber nicht. Es soll im Normalfall immer ohne Adminrechte gestartet werden.

Dalai 26. Feb 2016 12:22

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Ist zufälligerweise auf dem System die UAC ausgeschaltet? Dann bringt das Verb runas nix.

[ADD]
Übrigens würde ich mir für solche Fälle einen kleinen Helper schreiben, der im Manifest requireAdministrator stehen hat. Diesen Helper rufst du von deiner Software aus auf, und hast damit eine saubere Trennung, die sogar unabhängig vom Installer funktioniert (gibt ja nicht nur MSI).
[/ADD]

MfG Dalai

machstuhl 26. Feb 2016 12:38

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Zitat:

Zitat von Dalai (Beitrag 1331444)
Ist zufälligerweise auf dem System die UAC ausgeschaltet? Dann bringt das Verb runas nix.

[ADD]
Übrigens würde ich mir für solche Fälle einen kleinen Helper schreiben, der im Manifest requireAdministrator stehen hat. Diesen Helper rufst du von deiner Software aus auf, und hast damit eine saubere Trennung, die sogar unabhängig vom Installer funktioniert (gibt ja nicht nur MSI).
[/ADD]

MfG Dalai

UAC ist an.

Danke für den Tipp mit dem Helper. Werde ich überlegen.

Sir Rufo 26. Feb 2016 13:03

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation
 
Es ist eigentlich ganz einfach
Delphi-Quellcode:
ShellExecute(
  0,
  'open',
  'msiexec.exe',
  '/i "somepath\sqlncli.msi" /qb IACCEPTSQLNCLILICENSETERMS=YES',
  'somepath',
  SW_NORMAL );
Du musst aber mit /qb aufrufen, sonst kommt der UAC-Dialog nicht!

Mit runas functioniert das auch mit dem /qn Parameter, aber nimm mal zum Testen den /qb Parameter und dann wirst du sehen können warum der Installer nicht ausgeführt wird ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz