[Gelöst:] Username ermitteln auch wenn Anwendung als Admin ausgeführt wird
-
Hey. Gibt es eine Möglichkeit, den Benutzernamen des aktiven Benutzers zu ermittlen, selbst wenn die Anwendung als Admin ausgeführt wird?
Schonmal Danke.
-
Über Environment.Username bist du nicht gestolpert?!Entschuldige, die Beschreibung in der MSDN war da zu uneindeutig.
-
Scheint nicht so einfach zu sein, siehe http://stackoverflow.com/questions/4491384/getting-the-current-logged-in-user-fulltoken-context
-
-
Wenn ein Programm über UAC als Administrator ausgeführt wird, dann ist der aktuelle Benutzer der Administrator.
Die "korrekte" Lösung wäre ein Programm vorzuschalten das ohne Elevation läuft. Da drin kann man dann den Usernamen abfragen, und das Programm welches Elevation benötigt rausstarten (und z.B. die UID des Userkontos per Commandline-Switch mitgeben).
-
inflames2k schrieb:
Über Environment.Username bist du nicht gestolpert?!Entschuldige, die Beschreibung in der MSDN war da zu uneindeutig.
Dann gibt er den Namen des Adminkontos. Das ist doch das Problem.
Den Anderen vielen Dank. Habs gelöst.
-
#Darius# schrieb:
Den Anderen vielen Dank. Habs gelöst.
Und wie haste es jetzt gemacht?
Die "Lösung" überLsaEnumerateLogonSessions/LsaGetLogonSessionData
halte ich nämlich für ... sagen wir freundlich mal "unvorteilhaft".
Kann ja mehrere Sessions gleichzeitig geben mit unterschiedlichen Benutzern (Fast User Switching, Remote Desktop etc.).EDIT:
Nö, ich bin doof
Ich ziehe meine Bedenken zurück.
Das Programm das "elevated" läuft läuft ja trotzdem in der selben Session (GetCurrentProcessId -> ProcessIdToSessionId
) - vermute/behaupte ich mal. Wenn man sich genau diese Session dann aus der Liste die man überLsaEnumerateLogonSessions/LsaGetLogonSessionData
bekommen hat raussucht, dann sollte das OK sein.
Man bekommt dann zwar nicht den Account mit dem das Programm gestartet wurde, aber zumindest den mit dem sich derjenige der das Programm gestartet hat ursprünglich eingeloggt hat. Was vermutlich gut genug ist.
-
hustbaer schrieb:
EDIT:
Nö, ich bin doof
Ich ziehe meine Bedenken zurück.
Das Programm das "elevated" läuft läuft ja trotzdem in der selben Session (GetCurrentProcessId -> ProcessIdToSessionId
) - vermute/behaupte ich mal. Wenn man sich genau diese Session dann aus der Liste die man überLsaEnumerateLogonSessions/LsaGetLogonSessionData
bekommen hat raussucht, dann sollte das OK sein.So siehts aus
Läuft alles wunderbar.hustbaer schrieb:
Man bekommt dann zwar nicht den Account mit dem das Programm gestartet wurde, aber zumindest den mit dem sich derjenige der das Programm gestartet hat ursprünglich eingeloggt hat. Was vermutlich gut genug ist.
Genau das wollte ich ja.