Holen Sie sich die angemeldeten Benutzernamen in C#
Wie bekomme ich die aktuell angemeldeten Benutzernamen in windows 7 (ich.e der Benutzer, der physisch bei der Konsole angemeldet, in dem das Programm, dass ich starten ausgeführt wird).
Zum Beispiel, wenn ich angemeldet bin als "MainUser" und starte meine Konsole-Anwendung (die Anzeige der angemeldeten Benutzer-Namen) als "SubUser", dann ist das Programm gibt nur "SubUser" als den derzeit angemeldeten Benutzer.
Ich habe folgende 2 Techniken, um den Namen des Benutzers. Beide sind nicht immer mir die Sache, die ich will.
System.Environment.GetEnvironmentVariable("USERNAME")
System.Security.Principal.WindowsIdentity.GetCurrent().User;
Beachten Sie, dass dies jedoch von VBScript-code gibt den angemeldeten Benutzernamen, unabhängig von der Benutzer-account, von dem dieses Skript ausgeführt wird:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set compsys_arr = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each sys in compsys_arr
Wscript.Echo "username: " & sys.UserName
Next
Keiner Weise es ist möglich in C#?
- Check Foren.whirlpool.net.au/archive/793434. Ich denke, man könnte den code ändern, so dass es passt genau zu Ihrem VBScript.
- Das VBScript funktioniert nicht bei mir (läuft gegen einen Win2003-server). Auch, wenn der Benutzer gewählt hat, führen Sie das Programm unter einem anderen Benutzer-account, warum willst du das ignorieren?
- Ich brauche, um Entscheidungen zu treffen, die in das Programm basierend auf dem angemeldeten Benutzer, das ist, warum!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich, nur die Umwandlung der WMI-Aufrufe c# funktioniert gut für mich.
Ich denke, man müsste ein P/Invoke-route. Sie brauchen, um herauszufinden, welche Arbeitsstation Sie Ihren Prozess ausgeführt wird, und dann bestimmen die Eigentümer dieser Arbeitsstation. Ich glaube nicht, dass es eine .NET-api für die Bestimmung dieser Dinge.
Win32-APIs, die Sie brauchen, zu betrachten, sind wahrscheinlich GetProcessWindowStation und GetUserObjectSecurity, um den Besitzer zu finden.
Obwohl ich nicht verstehe, wenn Sie möchten, um den Benutzernamen, der angemeldet ist, auf das system oder den Benutzer Namen ein, unter dem die Verwaltungskonsole ausgeführt wird - vielleicht könnten Sie versuchen, mithilfe von System.Umwelt.Benutzername - MSDN behauptet, dass es zeigt die angemeldeten Benutzernamen.
Du willst die user-Namen der session. Sie können herausfinden, Ihre session-ID durch den Aufruf ProcessIdToSessionId. Dann nutzen Sie WTSQuerySessionInformation, um herauszufinden, den Namen des Benutzers.