Jawaban:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserNameakan mengembalikan pengguna "RunA".
MessageBox.Show(Environment.UserName);masukkan ini ke dalam window_loadedacara Anda , dan jalankan dengan menggunakan RunA ....
Domain\Username. Bagaimana saya bisa mendapatkan Nama yang dikaitkan dengan nama pengguna?
Jika Anda berada di jaringan pengguna, maka nama pengguna akan berbeda:
Environment.UserName
- Will Display format : 'Username'
daripada
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
Pilih format yang Anda inginkan.
Environment.UserDomainName + "\\" + Environment.UserNameuntuk mendapatkan hasil yang tampaknya sama System.Security.Principal.WindowsIdentity.GetCurrent().Name. Sekarang, apa bedanya, Anda bertanya ... Saya tidak yakin.
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()setelah Splitsebelum memanggilLast()
ToArray()diperlukan. Anda akan membutuhkannya using System.Linq;.
Cobalah properti: Environment.UserName.
string userName = Environment.UserName;
Environment.UsernNamememberikan nama akun yang masuk, tetapi WindowsIdentity.GetCurrent().Namemengembalikan nama akun tempat aplikasi itu berjalan.
Dokumentasi untuk Environment.UserName tampaknya agak bertentangan:
Pada halaman yang sama tertulis:
Mendapat nama pengguna dari orang yang saat ini masuk ke sistem operasi Windows.
DAN
menampilkan nama pengguna orang yang memulai utas saat ini
Jika Anda menguji Environment.UserName menggunakan RunA, itu akan memberi Anda nama akun pengguna RunA, bukan pengguna yang awalnya masuk ke Windows.
Saya benar-benar mendukung jawaban yang lain, tetapi saya ingin menyoroti satu metode lagi yang mengatakan
String UserName = Request.LogonUserIdentity.Name;
Metode di atas mengembalikan saya nama pengguna dalam format: DomainName \ UserName . Misalnya, EUROPE \ UserName
Yang berbeda dari:
String UserName = Environment.UserName;
Yang ditampilkan dalam format: UserName
Dan akhirnya:
String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
yang memberi: NT AUTHORITY\IUSR(saat menjalankan aplikasi pada server IIS) dan DomainName\UserName(saat menjalankan aplikasi pada server lokal).
Requesthanya berfungsi jika Anda adalah aplikasi web. Ini adalah contoh dariSystem.Web.HttpRequest
Menggunakan:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Itu akan menjadi nama masuk.
Saya mencoba beberapa kombinasi dari jawaban yang ada, tetapi mereka memberi saya
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
Saya akhirnya menggunakan
string vUserName = User.Identity.Name;
Yang memberi saya nama pengguna domain pengguna saja sebenarnya.
String myUserName = Environment.UserName
Ini akan memberi Anda output - your_user_name
Gunakan System.Windows.Forms.SystemInformation.UserNameuntuk pengguna yang benar-benar masuk karena Environment.UserNamemasih mengembalikan akun yang sedang digunakan oleh proses saat ini.
Hanya dalam kasus seseorang mencari Nama Tampilan pengguna yang bertentangan dengan Nama Pengguna , seperti saya.
Inilah perlakukannya:
System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName
Tambahkan Referensi ke System.DirectoryServices.AccountManagementdalam proyek Anda.
Saya sudah mencoba semua jawaban sebelumnya dan menemukan jawabannya di MSDN setelah tidak ada yang bekerja untuk saya. Lihat 'UserName4' untuk yang benar untuk saya.
Saya mencari Pengguna yang Masuk , seperti yang ditampilkan oleh:
<asp:LoginName ID="LoginName1" runat="server" />
Inilah sedikit fungsi yang saya tulis untuk mencoba semuanya. Hasil saya ada di komentar setelah setiap baris.
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;
}
Memanggil fungsi ini mengembalikan nama pengguna yang masuk dengan kembali.
Pembaruan: Saya ingin menunjukkan bahwa menjalankan kode ini pada contoh server lokal saya menunjukkan kepada saya bahwa Username4 mengembalikan "" (string kosong), tetapi UserName3 dan UserName5 mengembalikan Pengguna yang login. Hanya sesuatu yang perlu diwaspadai.
Ini kodenya (tetapi tidak dalam 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
Ini kodenya (sekarang juga dalam 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;
}
}
coba ini
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
sekarang terlihat lebih baik
Untuk aplikasi Windows Forms yang akan didistribusikan ke beberapa pengguna, banyak di antaranya masuk melalui vpn, saya telah mencoba beberapa cara yang semuanya bekerja untuk pengujian mesin lokal saya tetapi tidak untuk yang lain. Saya menemukan artikel Microsoft yang saya adaptasi dan berfungsi.
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;
}
}
}
Dapatkan nama pengguna Windows saat ini:
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
Jika bermanfaat bagi orang lain, ketika saya memutakhirkan aplikasi dari aplikasi c # .net 3.5 ke Visual Studio 2017 baris kode User.Identity.Name.Substring(4);ini melontarkan kesalahan ini " startIndex tidak boleh lebih besar dari panjang string " (tidak rusak sebelumnya).
Itu senang ketika saya mengubahnya System.Security.Principal.WindowsIdentity.GetCurrent().Nametetapi saya akhirnya menggunakan Environment.UserName;untuk mendapatkan pengguna Windows yang masuk dan tanpa bagian domain.
Saya memeriksa sebagian besar jawaban di sini dan tidak ada yang memberi saya nama pengguna yang tepat.
Dalam kasus saya, saya ingin mendapatkan nama pengguna yang masuk, sambil menjalankan aplikasi saya dari pengguna yang berbeda, seperti ketika menggeser + klik kanan pada file dan "Jalankan sebagai pengguna yang berbeda".
Jawaban yang saya coba berikan nama pengguna 'lain'.
Posting blog ini menyediakan cara untuk mendapatkan nama pengguna yang masuk, yang berfungsi bahkan dalam skenario saya:
https://smbadiwe.github.io/post/track-activities-windows-service/
Ini menggunakan Wtsapi
Environment.UserName?