@SimonGillbee, ini salah, Environment.UserNameakan mengembalikan pengguna "RunA".
Bolu
5
Untuk memverifikasi .... MessageBox.Show(Environment.UserName);masukkan ini ke dalam window_loadedacara Anda , dan jalankan dengan menggunakan RunA ....
Anda dapat menggunakan Environment.UserDomainName + "\\" + Environment.UserNameuntuk mendapatkan hasil yang tampaknya sama System.Security.Principal.WindowsIdentity.GetCurrent().Name. Sekarang, apa bedanya, Anda bertanya ... Saya tidak yakin.
Gutblender
9
Saya perlu agar pengguna menjalankan aplikasi daripada yang masuk (Environment.UserName bukan yang saya inginkan), jadi saya melakukan yang berikut untuk menghapus domain: System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
thehelix
Anda perlu menambahkan ToArray()setelah Splitsebelum memanggilLast()
codenamezero
1
@codenamezero Tidak ToArray()diperlukan. Anda akan membutuhkannya using System.Linq;.
Perhatian: seperti Simon Gillbee yang disebutkan dalam komentar dari jawaban yang diterima, Environment.UsernNamememberikan nama akun yang masuk, tetapi WindowsIdentity.GetCurrent().Namemengembalikan nama akun tempat aplikasi itu berjalan.
Gerwald
5
@leo: Perhatian: Informasi itu juga tampaknya salah, lihat jawaban Bolu . :-)
TJ Crowder
JANGAN menggunakannya dengan ASP.NET. docs.microsoft.com mengatakan: "Jika aplikasi ASP.NET berjalan di lingkungan pengembangan, properti UserName mengembalikan nama pengguna saat ini. Dalam aplikasi ASP.NET yang diterbitkan, properti ini mengembalikan nama akun kumpulan aplikasi ( seperti Default AppPool). "
feihoa
28
Dokumentasi untuk Environment.UserName tampaknya agak bertentangan:
Luar biasa. Saya juga menerima identitas kumpulan aplikasi saja. Tetapi kode Anda menyelesaikan masalah saya. Terima kasih banyak.
SuryaKavitha
Kedengarannya seperti Anda menginginkan nama pengguna dari pengguna yang membuat permintaan, saya kira untuk kontroler MVC atau Web API. Itu berbeda dengan nama pengguna dari proses yang sedang berjalan
Ben Aaronson
@ BenAaronson Pertanyaan tidak mengatakan apa-apa tentang nama pengguna apa yang menjalankan suatu proses. Saya membutuhkan nama pengguna domain yang saat ini masuk dan sebuah pencarian membawa saya ke halaman ini, kode ini akhirnya memberikan apa yang saya butuhkan.
Gunakan System.Windows.Forms.SystemInformation.UserNameuntuk pengguna yang benar-benar masuk karena Environment.UserNamemasih mengembalikan akun yang sedang digunakan oleh proses saat ini.
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.
protectedstringGetLoggedInUsername(){stringUserName=System.Security.Principal.WindowsIdentity.GetCurrent().Name;// Gives NT AUTHORITY\SYSTEMStringUserName2=Request.LogonUserIdentity.Name;// Gives NT AUTHORITY\SYSTEMStringUserName3=Environment.UserName;// Gives SYSTEMstringUserName4=HttpContext.Current.User.Identity.Name;// Gives actual user logged on (as seen in <ASP:Login />)stringUserName5=System.Windows.Forms.SystemInformation.UserName;// Gives SYSTEMreturnUserName4;}
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.
Situs web saya menggunakan IIS tetapi ketika saya mengunjungi halaman dari komputer lain dalam jaringan, saya tetap melihat "Layanan Jaringan" sebagai nama pengguna. Saya mencoba semua opsi berbeda tetapi tidak memberi saya pengguna yang masuk yang melihat halaman. Ada ide?
Si8
3
CATATAN: Tidak dibuat jelas, tetapi contoh di atas berlaku dalam konteks aplikasi web yang berjalan di IIS, di mana beberapa di antaranya akan menampilkan nama akun windows server yang mengeksekusi kumpulan aplikasi ASP.Net. Jika berjalan sebagai program interaktif atau layanan windows, yang dari HttpContext tidak akan tersedia, dan yang lain harus digunakan untuk menemukan akun tempat proses dijalankan.
Oskar Berggren
4
Ini kodenya (tetapi tidak dalam C #):
Private m_CurUser AsStringPublicReadOnlyPropertyCurrentUserAsStringGetIfString.IsNullOrEmpty(m_CurUser)ThenDim who AsSystem.Security.Principal.IIdentity=System.Security.Principal.WindowsIdentity.GetCurrent()If who IsNothingThen
m_CurUser =Environment.UserDomainName&"\" &Environment.UserNameElse
m_CurUser = who.NameEndIfEndIfReturn m_CurUser
EndGetEndProperty
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{publicstaticclassUserIdentity{// concept borrowed from // https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspxpublicstaticstringGetUser(){IntPtr accountToken =WindowsIdentity.GetCurrent().Token;WindowsIdentity windowsIdentity =newWindowsIdentity(accountToken);return windowsIdentity.Name;}}}
using System;classSample{publicstaticvoidMain(){Console.WriteLine();// <-- Keep this information secure! -->Console.WriteLine("UserName: {0}",Environment.UserName);}}
Situs web saya menggunakan IIS tetapi ketika saya mengunjungi halaman dari komputer lain dalam jaringan, saya tetap melihat "Layanan Jaringan" sebagai nama pengguna. Saya mencoba semua opsi berbeda tetapi tidak memberi saya pengguna yang masuk yang melihat halaman. Ada ide?
Si8
1
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'.
Environment.UserName
?Environment.UserName
akan mengembalikan pengguna "RunA".MessageBox.Show(Environment.UserName);
masukkan ini ke dalamwindow_loaded
acara 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:
daripada
Pilih format yang Anda inginkan.
sumber
Environment.UserDomainName + "\\" + Environment.UserName
untuk mendapatkan hasil yang tampaknya samaSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
. Sekarang, apa bedanya, Anda bertanya ... Saya tidak yakin.System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
setelahSplit
sebelum memanggilLast()
ToArray()
diperlukan. Anda akan membutuhkannyausing System.Linq;
.Cobalah properti:
Environment.UserName
.sumber
string userName = Environment.UserName;
Environment.UsernName
memberikan nama akun yang masuk, tetapiWindowsIdentity.GetCurrent().Name
mengembalikan nama akun tempat aplikasi itu berjalan.Dokumentasi untuk Environment.UserName tampaknya agak bertentangan:
Properti Environment.UserName
Pada halaman yang sama tertulis:
DAN
Jika Anda menguji Environment.UserName menggunakan RunA, itu akan memberi Anda nama akun pengguna RunA, bukan pengguna yang awalnya masuk ke Windows.
sumber
Saya benar-benar mendukung jawaban yang lain, tetapi saya ingin menyoroti satu metode lagi yang mengatakan
Metode di atas mengembalikan saya nama pengguna dalam format: DomainName \ UserName . Misalnya, EUROPE \ UserName
Yang berbeda dari:
Yang ditampilkan dalam format: UserName
Dan akhirnya:
yang memberi:
NT AUTHORITY\IUSR
(saat menjalankan aplikasi pada server IIS) danDomainName\UserName
(saat menjalankan aplikasi pada server lokal).sumber
Request
hanya berfungsi jika Anda adalah aplikasi web. Ini adalah contoh dariSystem.Web.HttpRequest
Menggunakan:
Itu akan menjadi nama masuk.
sumber
Anda mungkin juga ingin mencoba menggunakan:
Seperti ini...:
Semoga ini bermanfaat.
sumber
Saya mencoba beberapa kombinasi dari jawaban yang ada, tetapi mereka memberi saya
Saya akhirnya menggunakan
Yang memberi saya nama pengguna domain pengguna saja sebenarnya.
sumber
Ini akan memberi Anda output - your_user_name
sumber
Gunakan
System.Windows.Forms.SystemInformation.UserName
untuk pengguna yang benar-benar masuk karenaEnvironment.UserName
masih mengembalikan akun yang sedang digunakan oleh proses saat ini.sumber
Hanya dalam kasus seseorang mencari Nama Tampilan pengguna yang bertentangan dengan Nama Pengguna , seperti saya.
Inilah perlakukannya:
Tambahkan Referensi ke
System.DirectoryServices.AccountManagement
dalam proyek Anda.sumber
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:
Inilah sedikit fungsi yang saya tulis untuk mencoba semuanya. Hasil saya ada di komentar setelah setiap baris.
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.
sumber
Ini kodenya (tetapi tidak dalam C #):
Ini kodenya (sekarang juga dalam C #):
sumber
coba ini
sekarang terlihat lebih baik
sumber
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.
sumber
Dapatkan nama pengguna Windows saat ini:
sumber
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().Name
tetapi saya akhirnya menggunakanEnvironment.UserName;
untuk mendapatkan pengguna Windows yang masuk dan tanpa bagian domain.sumber
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
sumber