Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

Programm mit eigenen Adminrechten neu starten

  Alt 18. Apr 2011, 15:39
Hallo zusammen,
ich habe mich schon versucht, in das erweiterte Thema mit der UAC einzulesen, und mein "Problem" ist wohl so einfach, das die Frage in dieser Form hier wohl noch nicht (klar beantwortet?) stand (?)

Mein Programm hat einen Start-Assistenten bekommen der für bestimmte Aktionen Admin-Rechte braucht. Da das Programm, dank UAC, auch wenn ich Administrator bin, mit "normalen" Rechten startet, können diese Aktionen nicht durchgeführt werden.

Wenn ich nun beim Programmstart eine Abfrage mache, und feststelle, dass ich keine Admin-Rechte habe, soll das Programm nochmal mit Admin-Rechten gestartet werden.

Ich benutze das Windows 7 Manifest mit "asInvoker".

----

Ist es richtig, dass ich hiermit einzelne Programm-Passagen nicht mit Admin-Berechtigung ausführen kann, sondern nur neue Prozesse etc. erstellen kann?
Delphi-Quellcode:
If ImpersonateLoggedOnUser(AdminToken) then begin
  // hier kommt Dein Prog.-Code hin
  RevertToSelf; // zurückschalten zum angemeldeten Benutzer
end;
Wie starte ich nun mein Programm ein zweites Mal, so dass der Benutzer die von Windows vorgegebene UAC-Abfrage bekommt, wenn ein Programm als Admin startet? GGf. mit Abfrage Benutzername/Kennwort. Ich stelle mit das so vor, wie wenn ich als "dummer" Benutzer einen Drucker konfigurieren will, aber alles gesperrt ist. Ich drücke dann auf den Button mit dem Schutzschild, gebe die Anmeldeinformationen ein und gut ist.

Alle von mir gefundenen Beispiele hier im Forum setzen voraus, dass Benutzername und Kennwort bekannt sind. Ich finde es aber unnötig, einen bereits als Administrator angemeldeten Benutzer nochmals seine Zugangsdaten in mein selbstgebasteltes Formular eintippen zu lassen; es gibt ja die Windows-Anmelde Dialoge. Aber wie fordere ich den bei/vor dem zweiten Programmstart an? Mir ist klar, dass dies pauschal für jeden Programmstart über das Manifest lösbar ist, aber das wäre eine Zumutung für den Benutzer (da der Assistent nur ein einziges Mal insgesamt gestartet werden soll).

Falls das Code-Beispiel oben doch für einzelne Programm-Passagen klappen sollte, bitte ich um Info, wie ich denn das Admin-Token für den aktuell angemeldeten Benutzer erstelle. Schon klar, dass der generell Lokaler/Domänen-Admin sein muss.
  Mit Zitat antworten Zitat