답변:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName
. "RunAs"사용자를 반환합니다.
MessageBox.Show(Environment.UserName);
에 이것을 넣고 window_loaded
RunAs ...를 사용하여 실행하십시오.
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
다릅니 까?