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.
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.
Projekt JEDIs JEDI-Code-Bibliothek hat eine IsAdministrator-Funktion in der JclSecurity-Einheit, die Ihnen sagen wird . Es funktioniert immer noch in Delphi 7.
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
Updater2.exe
Dies hat mehrere Vorteile:
Es funktioniert auch unter Windows XP, Sie erhalten einen Login-Dialog, wenn Sie kein Administrator sind.
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.