AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Problem mit Anforderung von Administratorrechten für Treiberinstallation
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Anforderung von Administratorrechten für Treiberinstallation

Ein Thema von machstuhl · begonnen am 26. Feb 2016 · letzter Beitrag vom 26. Feb 2016
Antwort Antwort
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#1

Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 10:50
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 10:57
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
534 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 11:02
Definiere "selbstgeschriebener Installer". Wenn es einfach eine Applikation von Dir ist füge im Manifest Administrator required hinzu.

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.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni (26. Feb 2016 um 11:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 12:05
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#5

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 12:19
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?

Definiere "selbstgeschriebener Installer". Wenn es einfach eine Applikation von Dir ist füge im Manifest Administrator required hinzu.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#6

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 13:22
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
  Mit Zitat antworten Zitat
machstuhl

Registriert seit: 17. Jul 2012
40 Beiträge
 
#7

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 13:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Problem mit Anforderung von Administratorrechten für Treiberinstallation

  Alt 26. Feb 2016, 14:03
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Feb 2016 um 14:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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