Yanıtlar:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName
"RunAs" kullanıcı döndürür.
MessageBox.Show(Environment.UserName);
bunu window_loaded
etkinliğinize koyun ve RunAs'ı kullanarak çalıştırın ....
Domain\Username
. Kullanıcı adıyla ilişkili Adı nasıl alabilirim?
Bir kullanıcı ağındaysanız, kullanıcı adı farklı olacaktır:
Environment.UserName
- Will Display format : 'Username'
ziyade
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
İstediğiniz biçimi seçin.
Environment.UserDomainName + "\\" + Environment.UserName
Görünüşe göre aynı sonucu elde etmek için kullanabilirsiniz System.Security.Principal.WindowsIdentity.GetCurrent().Name
. Differenceimdi, fark nedir, soruyorsun ... Emin deđilim.
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
sonra Split
çağırmadan önceLast()
ToArray()
gerekli. using System.Linq;
Gerçi ihtiyacın var .
Özelliğini deneyin: Environment.UserName
.
string userName = Environment.UserName;
Environment.UsernName
, giriş yapmış hesap adını verir, ancak WindowsIdentity.GetCurrent().Name
uygulamanın çalıştığı hesap adını döndürür.
Environment.UserName belgeleri biraz çakışıyor gibi görünüyor:
Aynı sayfada diyor ki:
Windows işletim sisteminde oturum açmış olan kişinin kullanıcı adını alır.
VE
geçerli konuyu başlatan kişinin kullanıcı adını görüntüler
Ortam.KullanıcıAdı'nı RunAs kullanarak test ederseniz, ilk olarak Windows'da oturum açmış olan kullanıcıya değil, RunAs kullanıcı hesap adını verir.
Diğer cevapları tamamen ikinci olarak görüyorum, ancak şunu söyleyen bir yöntemi daha vurgulamak istiyorum:
String UserName = Request.LogonUserIdentity.Name;
Yukarıdaki yöntem bana kullanıcı adını şu biçimde döndürdü: DomainName \ UserName . Örneğin, EUROPE \ KullanıcıAdı
Hangisi farklı:
String UserName = Environment.UserName;
Hangi formatta görüntülenir: KullanıcıAdı
Ve sonunda:
String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
verdi: NT AUTHORITY\IUSR
(uygulamayı IIS sunucusunda DomainName\UserName
çalıştırırken ) ve (uygulamayı yerel bir sunucuda çalıştırırken).
Request
yalnızca bir web uygulamasıysanız çalışır. Bu bir örnekSystem.Web.HttpRequest
kullanın:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Oturum açma adı bu olacaktır.
Mevcut cevaplardan birkaç kombinasyon denedim, ama onlar bana
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
Kullanarak bitirdim
string vUserName = User.Identity.Name;
Bu da bana gerçek kullanıcıların alan adı kullanıcı adını verdi.
String myUserName = Environment.UserName
Bu size çıktı verecektir - kullanıcı_adı
System.Windows.Forms.SystemInformation.UserName
Gerçekte oturum açmış olan kullanıcı Environment.UserName
için geçerli işlem tarafından kullanılmakta olan hesabı döndürürken kullanın .
Önceki tüm cevapları denedim ve bunların hiçbiri benim için çalışmadan sonra MSDN'de cevabı buldum. Benim için doğru olanı görmek için 'KullanıcıAdı4'e bakınız.
Oturum açmış olan kullanıcının peşinde olduğum gibi:
<asp:LoginName ID="LoginName1" runat="server" />
İşte hepsini denemek için yazdığım küçük bir işlev. Sonucum her satırdan sonraki yorumlarda.
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;
}
Bu işlevin çağrılması, oturum açmış kullanıcı adını döndürerek döndürür.
Güncelleme: Yerel sunucu örneğimde bu kodu çalıştırmanın Kullanıcı Adı4'ün "" (boş bir dize) döndürdüğünü, ancak KullanıcıAdı3 ve KullanıcıAdı5'in oturum açmış Kullanıcıyı döndürdüğünü belirtmek isterim. Dikkat edilmesi gereken bir şey.
İşte kod (ama C # değil):
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
İşte kod (şimdi C # da):
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;
}
}
bunu dene
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
şimdi daha iyi görünüyor
Geçerli Windows kullanıcı adını edinin:
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
Birçoğu vpn üzerinden oturum açan birkaç kullanıcıya dağıtılacak bir Windows Forms uygulaması için, hepsi yerel makine testlerimde işe yarayan, ancak diğerleri için değil, birkaç yol denedim. Uyarladığım ve çalıştığım bir Microsoft makalesiyle karşılaştım.
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;
}
}
}
Başkalarına yardımcı olması durumunda, bir uygulamayı c # .net 3.5 uygulamasından Visual Studio 2017'ye yükselttiğimde bu kod satırı User.Identity.Name.Substring(4);
" startIndex, dize uzunluğundan daha büyük olamaz " (daha önce baulk yapmadı) bu hatayı attı .
Bunu değiştirdiğimde mutlu oldum, System.Security.Principal.WindowsIdentity.GetCurrent().Name
ancak Environment.UserName;
oturum açmış Windows kullanıcısını ve etki alanı kısmı olmadan almak için kullandım .
Buradaki cevapların çoğunu geçtim ve hiçbiri bana doğru kullanıcı adını vermedi.
Benim durumumda, farklı bir kullanıcıdan uygulamamı çalıştırırken oturum açmış kullanıcı adını almak istedim, örneğin bir dosyaya shift + sağ tıklama ve "Farklı bir kullanıcı olarak çalıştır" gibi.
Denediğim cevaplar bana 'diğer' kullanıcı adını verdi.
Bu blog yazısı, senaryomda bile çalışan giriş yapan kullanıcı adını almanın bir yolunu sunar:
https://smbadiwe.github.io/post/track-activities-windows-service/
Wtsapi kullanır
Environment.UserName
nedir?