Você pode usar Environment.UserDomainName + "\\" + Environment.UserNamepara obter aparentemente o mesmo resultado que System.Security.Principal.WindowsIdentity.GetCurrent().Name. Agora, qual é a diferença, você pergunta ... não tenho certeza.
Gutblender
9
Eu precisava para obter o usuário executar o aplicativo, em vez de quem está conectado (Environment.UserName não é o que eu quero), então eu fiz o seguinte para retirar o domínio: System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
thehelix
Você precisa adicionar ToArray()depois Splitantes de chamarLast()
codenamezero
1
@codenamezero Não ToArray()é necessário. Você precisaria using System.Linq;embora.
Cuidado: como Simon Gillbee mencionado nos comentários da resposta aceita, Environment.UsernNamefornece o nome da conta logada, mas WindowsIdentity.GetCurrent().Nameestá retornando o nome da conta em que o aplicativo está sendo executado.
Gerwald 14/10
5
@leo: Cuidado: Essa informação também parece aparentemente incorreta, veja a resposta de Bolu . :-)
TJ Crowder
NÃO o use com o ASP.NET. docs.microsoft.com diz: "Se um aplicativo ASP.NET for executado em um ambiente de desenvolvimento, a propriedade UserName retornará o nome do usuário atual. Em um aplicativo ASP.NET publicado, essa propriedade retornará o nome da conta do pool de aplicativos ( como AppPool padrão) ".
feihoa
28
A documentação para Environment.UserName parece um pouco conflitante:
que forneceu: NT AUTHORITY\IUSR(durante a execução do aplicativo no servidor IIS) e DomainName\UserName(durante a execução do aplicativo em um servidor local).
Excelente. Também recebi apenas a identidade do pool de aplicativos. Mas seu código resolveu meu problema. Muito obrigado.
SuryaKavitha
Parece que você queria o nome de usuário do usuário fazendo uma solicitação, acho que para um controlador MVC ou Web API. Isso é diferente do nome de usuário sob o qual o processo está sendo executado.
Ben Aaronson
@BenAaronson A pergunta não diz nada sobre o nome de usuário que está executando um processo. Eu precisava do nome de usuário do domínio atualmente conectado e uma pesquisa me levou a esta página; esse código acabou me dando o que eu precisava.
Use System.Windows.Forms.SystemInformation.UserNamepara o usuário realmente conectado, pois Environment.UserNameainda retorna a conta que está sendo usada pelo processo atual.
Eu tentei todas as respostas anteriores e encontrei a resposta no MSDN depois que nenhuma delas funcionou para mim. Veja 'UserName4' para o correto para mim.
Estou atrás do Usuário Conectado , conforme exibido por:
<asp:LoginName ID="LoginName1" runat="server"/>
Aqui está uma pequena função que escrevi para experimentá-los todos. Meu resultado está nos comentários após cada linha.
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;}
A chamada dessa função retorna o nome de usuário conectado por retorno.
Atualização: gostaria de salientar que a execução desse código na minha instância do servidor local mostra que o nome de usuário4 retorna "" (uma sequência vazia), mas o nome de usuário3 e o nome de usuário5 retornam o usuário conectado. Apenas algo para tomar cuidado.
Meu site está usando o IIS, mas quando visito a página de outro computador na rede, continuo vendo "Serviço de Rede" como o nome de usuário. Tentei todas as opções diferentes, mas isso não me dá o usuário conectado que está visualizando a página. Qualquer ideia?
Si8
3
NOTA: Não ficou claro, mas o exemplo acima se aplica ao contexto de um aplicativo Web em execução no IIS, onde vários deles exibirão o nome da conta do Windows Server que executa o pool de aplicativos ASP.Net. Se estiver sendo executado como um programa interativo ou serviço do Windows, o do HttpContext ficará indisponível e um dos outros deve ser usado para encontrar a conta na qual o processo é executado.
Oskar Berggren
4
Aqui está o código (mas não em 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
Para um aplicativo Windows Forms que deveria ser distribuído a vários usuários, muitos dos quais efetuavam login através da VPN, tentei várias maneiras que funcionavam no meu teste de máquina local, mas não em outros. Me deparei com um artigo da Microsoft que eu adaptei e funciona.
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);}}
Meu site está usando o IIS, mas quando visito a página de outro computador na rede, continuo vendo "Serviço de Rede" como o nome de usuário. Tentei todas as opções diferentes, mas isso não me dá o usuário conectado que está visualizando a página. Qualquer ideia?
Si8
1
Caso seja útil para outras pessoas, quando atualizei um aplicativo do aplicativo c # .net 3.5 para o Visual Studio 2017, esta linha de código User.Identity.Name.Substring(4);gerou o erro " startIndex não pode ser maior que o comprimento da string " (não era antes).
Fiquei feliz quando mudei para, System.Security.Principal.WindowsIdentity.GetCurrent().Nameno entanto, acabei usando Environment.UserName;para obter o usuário conectado do Windows e sem a parte do domínio.
Examinei a maioria das respostas aqui e nenhuma delas me deu o nome de usuário certo.
No meu caso, eu queria obter o nome de usuário conectado, enquanto executava o aplicativo de um usuário diferente, como quando shift + clique com o botão direito do mouse em um arquivo e em "Executar como um usuário diferente".
As respostas que eu tentei me deram o nome de usuário 'other'.
Environment.UserName
?Environment.UserName
retornará o usuário "RunAs".MessageBox.Show(Environment.UserName);
colocar isso em seuwindow_loaded
evento, e executá-lo usando RunAs ....Domain\Username
. Como posso obter o nome associado ao nome de usuário?Se você estiver em uma rede de usuários, o nome de usuário será diferente:
ao invés de
Escolha o formato que você deseja.
fonte
Environment.UserDomainName + "\\" + Environment.UserName
para obter aparentemente o mesmo resultado queSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
. Agora, qual é a diferença, você pergunta ... não tenho certeza.System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
depoisSplit
antes de chamarLast()
ToArray()
é necessário. Você precisariausing System.Linq;
embora.Experimente a propriedade:
Environment.UserName
.fonte
string userName = Environment.UserName;
Environment.UsernName
fornece o nome da conta logada, masWindowsIdentity.GetCurrent().Name
está retornando o nome da conta em que o aplicativo está sendo executado.A documentação para Environment.UserName parece um pouco conflitante:
Propriedade Environment.UserName
Na mesma página, diz:
E
Se você testar Environment.UserName usando RunAs, ele fornecerá o nome da conta de usuário RunAs, não o usuário originalmente conectado ao Windows.
fonte
Sou totalmente a segunda das outras respostas, mas gostaria de destacar mais um método que diz
O método acima retornou o nome de usuário no formato: DomainName \ UserName . Por exemplo, EUROPE \ UserName
O que é diferente de:
Que exibido no formato: UserName
E finalmente:
que forneceu:
NT AUTHORITY\IUSR
(durante a execução do aplicativo no servidor IIS) eDomainName\UserName
(durante a execução do aplicativo em um servidor local).fonte
Request
funciona apenas se você for um aplicativo da web. É um exemplo deSystem.Web.HttpRequest
Usar:
Esse será o nome do logon.
fonte
Você também pode tentar usar:
Como isso...:
Espero que isso tenha sido útil.
fonte
Eu tentei várias combinações de respostas existentes, mas elas estavam me dando
Acabei usando
O que me deu apenas o nome de usuário do domínio dos usuários reais.
fonte
Isso fornecerá a saída - your_user_name
fonte
Use
System.Windows.Forms.SystemInformation.UserName
para o usuário realmente conectado, poisEnvironment.UserName
ainda retorna a conta que está sendo usada pelo processo atual.fonte
Apenas no caso de alguém estar procurando pelo Nome para exibição do usuário em vez do Nome do usuário , como eu.
Aqui está o tratamento:
Adicione Referência a
System.DirectoryServices.AccountManagement
no seu projeto.fonte
Eu tentei todas as respostas anteriores e encontrei a resposta no MSDN depois que nenhuma delas funcionou para mim. Veja 'UserName4' para o correto para mim.
Estou atrás do Usuário Conectado , conforme exibido por:
Aqui está uma pequena função que escrevi para experimentá-los todos. Meu resultado está nos comentários após cada linha.
A chamada dessa função retorna o nome de usuário conectado por retorno.
Atualização: gostaria de salientar que a execução desse código na minha instância do servidor local mostra que o nome de usuário4 retorna "" (uma sequência vazia), mas o nome de usuário3 e o nome de usuário5 retornam o usuário conectado. Apenas algo para tomar cuidado.
fonte
Aqui está o código (mas não em C #):
Aqui está o código (agora também em C #):
fonte
tente isso
agora parece melhor
fonte
Para um aplicativo Windows Forms que deveria ser distribuído a vários usuários, muitos dos quais efetuavam login através da VPN, tentei várias maneiras que funcionavam no meu teste de máquina local, mas não em outros. Me deparei com um artigo da Microsoft que eu adaptei e funciona.
fonte
Obtenha o nome de usuário atual do Windows:
fonte
Caso seja útil para outras pessoas, quando atualizei um aplicativo do aplicativo c # .net 3.5 para o Visual Studio 2017, esta linha de código
User.Identity.Name.Substring(4);
gerou o erro " startIndex não pode ser maior que o comprimento da string " (não era antes).Fiquei feliz quando mudei para,
System.Security.Principal.WindowsIdentity.GetCurrent().Name
no entanto, acabei usandoEnvironment.UserName;
para obter o usuário conectado do Windows e sem a parte do domínio.fonte
Examinei a maioria das respostas aqui e nenhuma delas me deu o nome de usuário certo.
No meu caso, eu queria obter o nome de usuário conectado, enquanto executava o aplicativo de um usuário diferente, como quando shift + clique com o botão direito do mouse em um arquivo e em "Executar como um usuário diferente".
As respostas que eu tentei me deram o nome de usuário 'other'.
Esta postagem no blog fornece uma maneira de obter o nome de usuário conectado, que funciona mesmo no meu cenário:
https://smbadiwe.github.io/post/track-activities-windows-service/
Ele usa Wtsapi
fonte