Program Tip

C #을 사용하여 .NET에서 현재 사용자 이름을 얻으려면 어떻게해야합니까?

programtip 2020. 10. 3. 11:31
반응형

C #을 사용하여 .NET에서 현재 사용자 이름을 얻으려면 어떻게해야합니까?


C #을 사용하여 .NET에서 현재 사용자 이름을 얻으려면 어떻게해야합니까?


string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

사용자 네트워크에있는 경우 사용자 이름이 달라집니다.

Environment.UserName
- Will Display format : 'Username'

보다는

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

원하는 형식을 선택하십시오.


속성 시도 : Environment.UserName.


Environment.UserName에 대한 문서가 약간 충돌하는 것 같습니다.

Environment.UserName 속성

같은 페이지에 다음과 같이 표시됩니다.

현재 Windows 운영 체제에 로그온 한 사람의 사용자 이름을 가져옵니다.

현재 스레드를 시작한 사람의 사용자 이름을 표시합니다.

RunAs를 사용하여 Environment.UserName을 테스트하면 원래 Windows에 로그온 한 사용자가 아닌 RunAs 사용자 계정 이름이 제공됩니다.


나는 완전히 다른 답변을 두 번째로 들었지만, 다음과 같은 방법을 하나 더 강조하고 싶습니다.

String UserName = Request.LogonUserIdentity.Name;

위의 메서드는 DomainName \ UserName 형식의 사용자 이름을 반환했습니다 . 예 : EUROPE \ UserName

다음과 다른 점 :

String UserName = Environment.UserName;

다음 형식으로 표시됩니다. UserName

그리고 마지막으로:

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

이는 주었다 NT AUTHORITY\IUSR(IIS 서버에서 응용 프로그램을 실행하는 동안) 및 DomainName\UserName(로컬 서버에서 응용 프로그램을 실행하는 동안).


사용하다:

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

이것이 로그온 이름입니다.


다음을 사용해 볼 수도 있습니다.

Environment.UserName;

이렇게 ... :

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

도움이 되었기를 바랍니다.


기존 답변에서 여러 조합을 시도했지만

DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool

나는 결국 사용했다

string vUserName = User.Identity.Name;

실제 사용자 도메인 사용자 이름 만 제공했습니다.


사용 System.Windows.Forms.SystemInformation.UserName으로 실제 로그인 한 사용자에 대해 Environment.UserName여전히 현재 프로세스에 의해 사용되는 계정을 반환합니다.


String myUserName = Environment.UserName

이것은 당신에게 출력을 줄 것입니다 -your_user_name


나는 이전의 모든 답변을 시도해 보았고 이들 중 어느 것도 나를 위해 일하지 않은 후에 MSDN에서 답을 찾았습니다. 나를위한 올바른 이름은 'UserName4'를 참조하십시오.

I'm after the Logged in User, as displayed by:

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

Here's a little function I wrote to try them all. My result is in the comments after each row.

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;
}

Calling this function returns the logged in username by return.

Update: I would like to point out that running this code on my Local server instance shows me that Username4 returns "" (an empty string), but UserName3 and UserName5 return the logged in User. Just something to beware of.


Just in case someone is looking for user Display Name as opposed to User Name, like me.

Here's the treat :

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Add Reference to System.DirectoryServices.AccountManagement in your project.


Here is the code (but not 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

Here is the code (now also 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;
    }
}

try this

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

now it looks better


For a Windows Forms app that was to be distributed to several users, many of which log in over vpn, I had tried several ways which all worked for my local machine testing but not for others. I came across a Microsoft article that I adapted and works.

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;
        }
    }
}

Get the current Windows username:

using System;

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

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

In case it's helpful to others, when I upgraded an app from c#.net 3.5 app to Visual Studio 2017 this line of code User.Identity.Name.Substring(4); threw this error "startIndex cannot be larger than length of string" (it didn't baulk before).

It was happy when I changed it to System.Security.Principal.WindowsIdentity.GetCurrent().Name however I ended up using Environment.UserName; to get the logged in Windows user and without the domain portion.

참고URL : https://stackoverflow.com/questions/1240373/how-do-i-get-the-current-username-in-net-using-c

반응형