답변:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName. "RunAs"사용자를 반환합니다.
MessageBox.Show(Environment.UserName);에 이것을 넣고 window_loadedRunAs ...를 사용하여 실행하십시오.
Domain\Username. 사용자 이름과 관련된 이름을 얻으려면 어떻게해야합니까?
사용자 네트워크에 있다면 사용자 이름이 달라집니다.
Environment.UserName
- Will Display format : 'Username'
오히려
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
원하는 형식을 선택하십시오.
Environment.UserDomainName + "\\" + Environment.UserName겉보기와 동일한 결과를 얻는 데 사용할 수 있습니다 System.Security.Principal.WindowsIdentity.GetCurrent().Name. 자, 차이점은 무엇입니까, 묻습니다 ... 잘 모르겠습니다.
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()후 Split호출하기 전에Last()
ToArray()가 필요합니다. using System.Linq;그래도 필요합니다 .
속성을 사용해보십시오 : Environment.UserName.
string userName = Environment.UserName;
Environment.UsernName로그인 한 계정 이름을 제공하지만 WindowsIdentity.GetCurrent().Name응용 프로그램이 실행중인 계정 이름을 반환합니다.
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(로컬 서버에서 응용 프로그램을 실행하는 동안).
Request은 웹 응용 프로그램 인 경우에만 작동합니다. 그것은의 인스턴스입니다System.Web.HttpRequest
기존 답변에서 여러 조합을 시도했지만 그들은 나에게주는
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
나는 사용했다
string vUserName = User.Identity.Name;
실제 사용자 도메인 사용자 이름 만 제공했습니다.
사용 System.Windows.Forms.SystemInformation.UserName으로 실제 로그인 한 사용자에 대해 Environment.UserName여전히 현재 프로세스에 의해 사용되는 계정을 반환합니다.
나는 이전의 모든 대답을 시도했지만 이것들이 저에게 도움이되지 않은 후에 MSDN에서 답을 찾았습니다. 나에게 맞는 것은 'UserName4'를 참조하십시오.
다음과 같이 로그인 한 사용자 다음 에 표시됩니다.
<asp:LoginName ID="LoginName1" runat="server" />
여기에 그것들을 모두 시험해보기 위해 작성한 작은 기능이 있습니다. 내 결과는 각 행 뒤에 주석에 있습니다.
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;
}
이 함수를 호출하면 로그인 한 사용자 이름이 반환됩니다.
업데이트 : 로컬 서버 인스턴스 에서이 코드를 실행하면 Username4가 ""(빈 문자열)를 반환하지만 UserName3 및 UserName5는 로그인 한 사용자를 반환한다는 것을 나타냅니다. 조심해야 할 것.
코드는 다음과 같습니다 (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
다음은 코드입니다 (현재 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;
}
}
이 시도
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
이제 더 좋아 보인다
현재 Windows 사용자 이름을 가져옵니다.
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
VPN을 통해 로그인하는 여러 사용자에게 배포 될 Windows Forms 앱의 경우 로컬 컴퓨터 테스트에는 효과가 있지만 다른 컴퓨터에는 효과가없는 여러 가지 방법을 시도했습니다. 내가 적응하고 작동하는 Microsoft 기사를 발견했습니다.
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;
}
}
}
다른 사람들에게 도움이되는 경우 c # .net 3.5 앱에서 Visual Studio 2017으로 앱을 업그레이드 할 때이 코드 줄에서 User.Identity.Name.Substring(4);" startIndex는 문자열 길이보다 클 수 없습니다 "라는 오류가 발생 했습니다 (이전에는 멍청하지 않았습니다).
내가 그것을 변경했을 때 행복 System.Security.Principal.WindowsIdentity.GetCurrent().Name했지만 Environment.UserName;도메인 부분없이 Windows 사용자에 로그인 하는 데 사용 했습니다.
나는 대부분의 답변을 여기에서 보았고 그들 중 누구도 올바른 사용자 이름을주지 못했습니다.
필자의 경우 파일을 Shift + 마우스 오른쪽 버튼으로 클릭하고 "다른 사용자로 실행"과 같이 다른 사용자로부터 내 앱을 실행하는 동안 로그인 한 사용자 이름을 얻으려고했습니다.
내가 시도한 답변은 나에게 '다른'사용자 이름을 부여했습니다.
이 블로그 게시물은 로그인 한 사용자 이름을 얻는 방법을 제공합니다.이 시나리오는
https://smbadiwe.github.io/post/track-activities-windows-service/
Wtsapi를 사용합니다
Environment.UserName다릅니 까?