Come posso ottenere il nome utente corrente in .NET usando C #?

Come posso ottenere il nome utente corrente in .NET usando C #?

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

Se ti trovi in ​​una rete di utenti, il nome utente sarà diverso:

 Environment.UserName - Will Display format : 'Username' 

piuttosto che

 System.Security.Principal.WindowsIdentity.GetCurrent().Name - Will Display format : 'NetworkName\Username' 

Scegli il formato che desideri.

Prova la proprietà: Environment.UserName .

La documentazione per Environment.UserName sembra essere un po ‘in conflitto:

Proprietà Environment.UserName

Sulla stessa pagina dice:

Ottiene il nome utente della persona attualmente connessa al sistema operativo Windows.

E

visualizza il nome utente della persona che ha avviato il thread corrente

Se testate Environment.UserName usando RunAs, vi darà il nome dell’account utente RunAs, non l’utente originariamente connesso a Windows.

Uso:

 System.Security.Principal.WindowsIdentity.GetCurrent().Name 

Quello sarà il nome di accesso.

Completo totalmente le altre risposte, ma vorrei evidenziare un altro metodo che dice

 String UserName = Request.LogonUserIdentity.Name; 

Il metodo sopra riportato mi ha restituito il nome utente nel formato: DomainName \ UserName . Ad esempio, EUROPE \ UserName

Che è diverso da:

 String UserName = Environment.UserName; 

Che visualizzato nel formato: UserName

E infine:

 String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

che ha fornito: NT AUTHORITY\IUSR (durante l’esecuzione dell’applicazione sul server IIS) e DomainName\UserName (durante l’esecuzione dell’applicazione su un server locale).

Potresti anche provare a utilizzare:

 Environment.UserName; 

Come questo…:

 string j = "Your WindowsXP Account Name is: " + Environment.UserName; 

Spero che questo sia stato utile.

Ho provato diverse combinazioni dalle risposte esistenti, ma mi stavano dando

 DefaultAppPool IIS APPPOOL IIS APPPOOL\DefaultAppPool 

Ho finito per usare

 string vUserName = User.Identity.Name; 

Che mi ha dato solo il nome utente del dominio degli utenti effettivo.

Utilizzare System.Windows.Forms.SystemInformation.UserName per l’utente attualmente connesso come Environment.UserName restituisce comunque l’account utilizzato dal processo corrente.

Ho provato tutte le risposte precedenti e ho trovato la risposta su MSDN dopo che nessuno di questi ha funzionato per me. Vedi “UserName4” per quello corretto per me.

Sto cercando Utente connesso , come mostrato da:

  

Ecco una piccola funzione che ho scritto per provarli tutti. Il mio risultato è nei commenti dopo ogni riga.

 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 ) string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM return UserName4; } 

La chiamata a questa funzione restituisce il nome utente registrato per ritorno.

Aggiornamento: vorrei sottolineare che l’esecuzione di questo codice sull’istanza del mio server locale mi mostra che Username4 restituisce “” (una stringa vuota), ma UserName3 e UserName5 restituiscono l’utente connesso. Solo qualcosa da cui stare attenti.

Ecco il codice (ma non in 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 

Ecco il codice (ora anche in 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; } } 

prova questo

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem"); ManagementObjectCollection collection = searcher.Get(); string username = (string)collection.Cast().First()["UserName"]; 

ora sembra migliore

Per un’app Windows Form che doveva essere distribuita a diversi utenti, molti dei quali eseguivano l’accesso tramite VPN, avevo provato diversi modi che hanno funzionato tutti per il test della macchina locale, ma non per altri. Mi sono imbattuto in un articolo di Microsoft che ho adattato e funziona.

 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; } } } 

Nel caso in cui qualcuno stia cercando Nome utente visualizzato in contrapposizione a Nome utente , come me.

Ecco il trattamento:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

Aggiungi riferimento a System.DirectoryServices.AccountManagement nel tuo progetto.

Ottieni il nome utente corrente di Windows:

 using System; class Sample { public static void Main() { Console.WriteLine(); // < -- Keep this information secure! --> Console.WriteLine("UserName: {0}", Environment.UserName); } } 

Nel caso in cui sia utile per gli altri, quando ho aggiornato un’app dall’app c # .net 3.5 a Visual Studio 2017 questa riga di codice User.Identity.Name.Substring(4); ha lanciato questo errore ” startIndex non può essere più grande della lunghezza della stringa ” (non si è verificato prima).

Era felice quando l’ho cambiato in System.Security.Principal.WindowsIdentity.GetCurrent().Name tuttavia, ho finito con l’uso di Environment.UserName; per ottenere l’utente Windows connesso e senza la porzione di dominio.