Suchen Sie nach Delphi 7-Code, um zu erkennen, ob ein Programm mit Administratorrechten gestartet wurde?

8

Ich suche nach funktioniert ( offensichtlich ) Delphi 7-Code , damit ich überprüfen kann, ob mein Programm mit Administratorrechten gestartet wurde .

Vielen Dank im Voraus

[--- WICHTIGE AKTUALISIERUNG ---]

Nachdem ich den Code in den Antworten bis jetzt gelesen habe, wird mir klar, dass meine Frage vielleicht nicht so klar oder zumindest nicht vollständig ist:

  • Ich möchte wissen, ob mein Delphi 7-Programm mit dem Kontrollkästchen 'Als Administrator ausführen' gestartet wurde, das auf gesetzt ist.

  • Mit anderen Worten: Ich möchte wissen, ob es für mein Delphi 7-Programm möglich ist, Dateien in den Ordnern c: \ Programme ... zu erstellen / zu aktualisieren / strong>.

Es genügt nicht, nur zu überprüfen, ob Sie Administratorrechte haben.

    
Edelcom 07.06.2011, 07:24
quelle

7 Antworten

15

Die Windows-API (verwendet), um eine Hilfsfunktion zu haben ( IsUserAnAdmin ), um festzustellen, ob Sie mit Administratorrechten arbeiten.

%Vor%

Die Shell32-Wrapperfunktion ist veraltet. Das ist in Ordnung, weil es nur ein Wrapper um anderen Code war, den Sie noch selbst aufrufen können :

%Vor%

Mit anderen Worten: Diese Funktion gibt Ihnen die Antwort, die Sie wollen: Kann der Benutzer Programmdateien aktualisieren.

Sie müssen den Code überdrüssig sein, um zu überprüfen, ob Sie Mitglied der Gruppe des Administrators sind. Sie können Teil der Administratorgruppe sein, aber keine Administratorrechte haben. Sie können auch Administratorrechte haben, aber nicht Teil der Administratorgruppe sein.

    
Ian Boyd 12.06.2011 01:15
quelle
5

Projekt JEDIs JEDI-Code-Bibliothek hat eine IsAdministrator-Funktion in der JclSecurity-Einheit, die Ihnen sagen wird . Es funktioniert immer noch in Delphi 7.

    
Ken White 07.06.2011 13:08
quelle
4
%Vor%     
Premature Optimization 16.06.2011 04:35
quelle
3

Der von Microsoft empfohlene Weg zur Lösung dieses Problems: Teilen Sie die Anwendung in zwei Teile.

Ссылка

Die erste App prüft, ob es notwendig ist, die zweite zu starten.

Die zweite App enthält ein "require admin" Manifest (wie David schrieb) und Sie öffnen es mit dem ShellExecuteEx 'runas' Verb.

Im Falle eines Web-Updaters könnte der Workflow wie folgt aussehen:

Updater1.exe

  1. Überprüft, ob Updates verfügbar sind.
  2. fragt optional den Benutzer, ob er die Updates installieren möchte.
  3. Lädt die Aktualisierungen an einen temporären Speicherort herunter.
  4. Führt Updater2.exe mit ShellExecuteEx und dem 'runas' Verb aus.

Updater2.exe

  1. Wird auf UAC ausgewertet, wenn die Benutzer die Eingabeaufforderung bestätigen oder überhaupt nicht ausgeführt werden.
  2. Kann die Dateien dann vom temporären Speicherort zum endgültigen Speicherort kopieren.

Dies hat mehrere Vorteile:

  • Der Updater2 enthält nur die minimalen Operationen, die erhöht ausgeführt werden müssen.
  • Der Updater2 kann Teil der Dateien sein, die heruntergeladen werden.
  • Es müssen keine Privilegien überprüft werden, die UAC kümmert sich darum.

Es funktioniert auch unter Windows XP, Sie erhalten einen Login-Dialog, wenn Sie kein Administrator sind.

    
Jens Mühlenhoff 17.08.2011 10:57
quelle
2

Jwscl (Die Jedi-Windows-Sicherheitsbibliothek) hat eine Funktion dafür: JwCheckAdministratorAccess .

%Vor%

Verwendung ist sehr einfach:

%Vor%

Diese Funktion funktioniert auch in Windows Vista und später, wenn UAC aktiviert ist. Wenn der aktuelle Prozess nicht erhöht ist, ist der Rückgabewert false, auch wenn das Token die Gruppe Administratoren enthält (die dann deaktiviert ist). Diese Funktion erkennt eine Gruppenmitgliedschaft in der Administratorgruppe, was bedeutet, dass der Benutzer nicht direkt in der Administratorgruppe sein muss, sondern dass eine Gruppe Mitglied der Administratorengruppe sein kann.

    
Remko 01.12.2011 09:14
quelle
2

Ich habe diesen Code mit Delphi 7 getestet, unter Windows XP, 7 und 8 (admin und limited accounts):

%Vor%     
Guybrush 20.04.2014 14:07
quelle
1

Dieser Code funktioniert unter D7..XE inc.

%Vor%     
Brian Frost 08.06.2011 17:11
quelle

Tags und Links