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에 대한 문서가 약간 충돌하는 것 같습니다.
같은 페이지에 다음과 같이 표시됩니다.
현재 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
'Program Tip' 카테고리의 다른 글
체크 아웃을 사용하지 않고 Git 브랜치를 병합, 업데이트 및 가져 오기 (0) | 2020.10.03 |
---|---|
SpringData JPA에서 CrudRepository와 JpaRepository 인터페이스의 차이점은 무엇입니까? (0) | 2020.10.03 |
Node.js 배포 설정 / 구성 파일을 저장하는 방법은 무엇입니까? (0) | 2020.10.02 |
MySQL 데이터베이스 / 테이블 / 열이 어떤 문자 집합인지 어떻게 알 수 있습니까? (0) | 2020.10.02 |
이론적으로 사이클 당 최대 4 개의 FLOP을 달성하려면 어떻게해야합니까? (0) | 2020.10.02 |