it-swarm.com.de

Wie erhalte ich den aktuellen Benutzernamen in .NET mit C #?

Wie erhalte ich den aktuellen Benutzernamen in .NET mit C #?

555
Yves
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
825
juan

Wenn Sie sich in einem Netzwerk von Benutzern befinden, unterscheidet sich der Benutzername:

Environment.UserName
- Will Display format : 'Username'

eher, als

System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'

Wählen Sie das gewünschte Format.

297

Probieren Sie die Eigenschaft: Environment.UserName .

108
JaredPar

Die Dokumentation für Environment.UserName scheint ein wenig widersprüchlich zu sein:

Environment.UserName-Eigenschaft

Auf derselben Seite steht:

Ruft den Benutzernamen der Person ab, die derzeit am Windows-Betriebssystem angemeldet ist.

UND

zeigt den Benutzernamen der Person an, die den aktuellen Thread gestartet hat

Wenn Sie Environment.UserName mit RunAs testen, wird der Name des RunAs-Benutzerkontos angezeigt, nicht der Benutzer, der ursprünglich bei Windows angemeldet war.

27
Kobus

Ich stimme den anderen Antworten voll und ganz zu, möchte aber noch eine weitere Methode hervorheben, die besagt

String UserName = Request.LogonUserIdentity.Name;

Die obige Methode gab mir den Benutzernamen im Format zurück: DomainName\UserName. Zum Beispiel EUROPA\Benutzername

Welches ist anders als:

String UserName = Environment.UserName;

Welche im Format angezeigt: serName

Und schlussendlich:

String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

dies ergab: NT AUTHORITY\IUSR (während die Anwendung auf dem IIS Server ausgeführt wurde) und DomainName\UserName (während die Anwendung auf einem lokalen Server ausgeführt wurde).

24
Shivam657

Verwenden:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Das wird der Anmeldename sein.

21
John Cuckaroo

Möglicherweise möchten Sie auch versuchen, Folgendes zu verwenden:

Environment.UserName;

So was...:

string j = "Your WindowsXP Account Name is: " + Environment.UserName;

Hoffe das war hilfreich.

11
jay_t55

Ich habe mehrere Kombinationen aus vorhandenen Antworten ausprobiert, aber sie gaben mir

DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool

Am Ende habe ich verwendet

string vUserName = User.Identity.Name;

Welches gab mir die tatsächlichen Benutzer Domain Benutzername nur.

9
Daniel E.

Verwenden Sie System.Windows.Forms.SystemInformation.UserName für den tatsächlich angemeldeten Benutzer als Environment.UserName und geben Sie weiterhin das Konto zurück, das vom aktuellen Prozess verwendet wird.

9
Remy

Ich habe alle vorherigen Antworten ausprobiert und die Antwort auf MSDN gefunden, nachdem keine dieser Antworten für mich funktioniert hat. Siehe 'UserName4' für den richtigen für mich.

Ich bin nach dem Angemeldeter Benutzer, angezeigt von:

<asp:LoginName ID="LoginName1" runat="server" />

Hier ist eine kleine Funktion, die ich geschrieben habe, um sie alle auszuprobieren. Mein Ergebnis steht in den Kommentaren nach jeder Zeile.

protected string GetLoggedInUsername()
{
    string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM
    String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM
    String UserName3 = Environment.UserName; // Gives SYSTEM
    string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />)
    string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM
    return UserName4;
}

Durch Aufrufen dieser Funktion wird der angemeldete Benutzername zurückgegeben.

Update: Ich möchte darauf hinweisen, dass die Ausführung dieses Codes auf meiner lokalen Serverinstanz zeigt, dass Benutzername4 "" (eine leere Zeichenfolge) zurückgibt, aber Benutzername3 und Benutzername5 den angemeldeten Benutzer zurückgeben. Nur etwas, vor dem man sich hüten muss.

5
FlashTrev

Nur für den Fall, dass jemand nach einem Benutzer sucht Anzeigename im Gegensatz zu Benutzername , wie ich.

Hier ist der Leckerbissen:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Fügen Sie in Ihrem Projekt einen Verweis auf System.DirectoryServices.AccountManagement hinzu.

5
Bhramar
String myUserName = Environment.UserName

Dadurch erhalten Sie die Ausgabe - Ihr_Benutzername

5

versuche dies

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];

jetzt sieht es besser aus

3
priyesh jaiswal

Hier ist der Code (aber nicht in C #):

Private m_CurUser As String

Public ReadOnly Property CurrentUser As String
    Get
        If String.IsNullOrEmpty(m_CurUser) Then
            Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()

            If who Is Nothing Then
                m_CurUser = Environment.UserDomainName & "\" & Environment.UserName
            Else
                m_CurUser = who.Name
            End If
        End If
        Return m_CurUser
    End Get
End Property

Hier ist der Code (jetzt auch in C #):

private string m_CurUser;

public string CurrentUser
{
    get
    {
        if(string.IsNullOrEmpty(m_CurUser))
        {
            var who = System.Security.Principal.WindowsIdentity.GetCurrent();
            if (who == null)
                m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
            else
                m_CurUser = who.Name;
        }
        return m_CurUser;
    }
}
3
Michael B

Für eine Windows Forms-App, die an mehrere Benutzer verteilt werden sollte, von denen sich viele über VPN anmelden, hatte ich verschiedene Methoden ausprobiert, die alle für das Testen meines lokalen Computers, jedoch nicht für andere geeignet waren. Ich bin auf einen Microsoft-Artikel gestoßen, den ich angepasst habe und der funktioniert.

using System;
using System.Security.Principal;

namespace ManageExclusion
{
    public static class UserIdentity

    {
        // concept borrowed from 
        // https://msdn.Microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx

        public static string GetUser()
        {
            IntPtr accountToken = WindowsIdentity.GetCurrent().Token;
            WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken);
            return windowsIdentity.Name;
        }
    }
}
2
john rains

Falls es für andere hilfreich ist, wenn ich eine Anwendung von c # .net 3.5 auf Visual Studio 2017 aktualisiert habe, hat diese Codezeile User.Identity.Name.Substring(4); diesen Fehler ausgelöst "startIndex kann nicht größer als die Länge der Zeichenfolge sein "(es hat vorher nicht geklappt).

Es hat mich gefreut, als ich es in System.Security.Principal.WindowsIdentity.GetCurrent().Name geändert habe. Am Ende habe ich jedoch Environment.UserName; verwendet, um den angemeldeten Windows-Benutzer ohne den Domain-Teil abzurufen.

1
Doreen

Den aktuellen Windows-Benutzernamen abrufen:

using System;

class Sample
{
    public static void Main()
    {
        Console.WriteLine();

        //  <-- Keep this information secure! -->
        Console.WriteLine("UserName: {0}", Environment.UserName);
    }
}
1
Anaramer