Vous pouvez utiliser Environment.UserDomainName + "\\" + Environment.UserNamepour obtenir apparemment le même résultat que System.Security.Principal.WindowsIdentity.GetCurrent().Name. Maintenant, quelle est la différence, demandez-vous ... Je ne suis pas sûr.
Gutblender
9
J'avais besoin que l'utilisateur exécute l'application plutôt que qui est connecté (Environment.UserName n'est pas ce que je veux), j'ai donc fait ce qui suit pour System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
Attention: comme Simon Gillbee l'a mentionné dans les commentaires de la réponse acceptée, Environment.UsernNamedonne le nom de compte connecté, mais WindowsIdentity.GetCurrent().Namerenvoie le nom de compte sous lequel l'application s'exécute.
Gerwald
5
@leo: Attention: Ces informations sont également apparemment incorrectes, voir la réponse de Bolu . :-)
TJ Crowder
Ne l'utilisez PAS avec ASP.NET. docs.microsoft.com dit: "Si une application ASP.NET s'exécute dans un environnement de développement, la propriété UserName renvoie le nom de l'utilisateur actuel. Dans une application ASP.NET publiée, cette propriété renvoie le nom du compte du pool d'applications ( comme Default AppPool). "
feihoa
28
La documentation pour Environment.UserName semble être un peu conflictuelle:
Obtient le nom d'utilisateur de la personne actuellement connectée au système d'exploitation Windows.
ET
affiche le nom d'utilisateur de la personne qui a démarré le fil de discussion actuel
Si vous testez Environment.UserName à l'aide de RunAs, il vous donnera le nom du compte d'utilisateur RunAs, pas l'utilisateur initialement connecté à Windows.
qui a donné: NT AUTHORITY\IUSR(lors de l'exécution de l'application sur le serveur IIS) et DomainName\UserName(lors de l'exécution de l'application sur un serveur local).
Excellent. J'ai également reçu uniquement l'identité du pool d'applications. Mais votre code a résolu mon problème. Merci beaucoup.
SuryaKavitha
Il semble que vous vouliez le nom d'utilisateur de l'utilisateur qui fait une demande, je suppose à un contrôleur MVC ou API Web. C'est différent du nom d'utilisateur sous lequel le processus s'exécute
Ben Aaronson
@BenAaronson La question ne dit rien sur le nom d'utilisateur qui exécute un processus. J'avais besoin du nom d'utilisateur du domaine actuellement connecté et une recherche m'a amené sur cette page, ce code m'a finalement donné ce dont j'avais besoin.
Daniel E.
11
String myUserName =Environment.UserName
Cela vous donnera une sortie - votre_nom_utilisateur
Utiliser System.Windows.Forms.SystemInformation.UserNamepour l'utilisateur réellement connecté car Environment.UserNamerenvoie toujours le compte utilisé par le processus en cours.
J'ai essayé toutes les réponses précédentes et trouvé la réponse sur MSDN après qu'aucune de ces réponses n'ait fonctionné pour moi. Voir 'UserName4' pour le bon pour moi.
Je suis après l' utilisateur connecté , comme indiqué par:
<asp:LoginName ID="LoginName1" runat="server"/>
Voici une petite fonction que j'ai écrite pour les essayer tous. Mon résultat est dans les commentaires après chaque ligne.
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;}
L'appel de cette fonction renvoie le nom d'utilisateur connecté par retour.
Mise à jour: je voudrais souligner que l'exécution de ce code sur mon instance de serveur local me montre que Username4 renvoie "" (une chaîne vide), mais UserName3 et UserName5 renvoient l'utilisateur connecté. Juste quelque chose dont il faut se méfier.
Mon site Web utilise IIS, mais lorsque je visite la page à partir d'un autre ordinateur du réseau, je vois toujours "Service réseau" comme nom d'utilisateur. J'ai essayé toutes les options différentes, mais cela ne me donne pas l'utilisateur connecté qui consulte la page. Une idée?
Si8
3
REMARQUE: ce n'est pas clair, mais l'exemple ci-dessus s'applique dans le contexte d'une application Web exécutée dans IIS, où plusieurs d'entre eux afficheront le nom du compte Windows du serveur qui exécute le pool d'applications ASP.Net. Si vous exécutez en tant que programme interactif ou service Windows, celui de HttpContext ne sera pas disponible et l'un des autres doit être utilisé pour trouver le compte sous lequel le processus s'exécute.
Oskar Berggren
4
Voici le code (mais pas en 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
Pour une application Windows Forms qui devait être distribuée à plusieurs utilisateurs, dont beaucoup se connectaient via vpn, j'avais essayé plusieurs méthodes qui fonctionnaient toutes pour mes tests de machine locale mais pas pour d'autres. Je suis tombé sur un article Microsoft que j'ai adapté et qui fonctionne.
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);}}
Mon site Web utilise IIS, mais lorsque je visite la page à partir d'un autre ordinateur du réseau, je vois toujours "Service réseau" comme nom d'utilisateur. J'ai essayé toutes les options différentes, mais cela ne me donne pas l'utilisateur connecté qui consulte la page. Une idée?
Si8
1
Au cas où cela serait utile à d'autres, lorsque j'ai mis à niveau une application de l'application c # .net 3.5 vers Visual Studio 2017, cette ligne de code a User.Identity.Name.Substring(4);généré cette erreur " startIndex ne peut pas être plus long que la longueur de la chaîne " (il n'a pas reculé auparavant).
Il était heureux quand je l'ai changé, System.Security.Principal.WindowsIdentity.GetCurrent().Namemais j'ai fini par utiliser Environment.UserName;pour obtenir l'utilisateur Windows connecté et sans la partie domaine.
J'ai parcouru la plupart des réponses ici et aucune ne m'a donné le bon nom d'utilisateur.
Dans mon cas, je voulais obtenir le nom d'utilisateur connecté, tout en exécutant mon application à partir d'un autre utilisateur, comme lorsque Maj + clic droit sur un fichier et "Exécuter en tant qu'utilisateur différent".
Les réponses que j'ai essayées m'ont donné le nom d'utilisateur «autre».
Environment.UserName
?Environment.UserName
renverra l'utilisateur "RunAs".MessageBox.Show(Environment.UserName);
mettez ceci dans votrewindow_loaded
événement, et exécutez-le en utilisant RunAs ....Domain\Username
. Comment puis-je obtenir le nom associé au nom d'utilisateur?Si vous êtes dans un réseau d'utilisateurs, le nom d'utilisateur sera différent:
plutôt que
Choisissez le format souhaité.
la source
Environment.UserDomainName + "\\" + Environment.UserName
pour obtenir apparemment le même résultat queSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
. Maintenant, quelle est la différence, demandez-vous ... Je ne suis pas sûr.System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
aprèsSplit
avant d'appelerLast()
ToArray()
est nécessaire. Vous auriez besoinusing System.Linq;
cependant.Essayez la propriété:
Environment.UserName
.la source
string userName = Environment.UserName;
Environment.UsernName
donne le nom de compte connecté, maisWindowsIdentity.GetCurrent().Name
renvoie le nom de compte sous lequel l'application s'exécute.La documentation pour Environment.UserName semble être un peu conflictuelle:
Environment.UserName, propriété
Sur la même page, il est écrit:
ET
Si vous testez Environment.UserName à l'aide de RunAs, il vous donnera le nom du compte d'utilisateur RunAs, pas l'utilisateur initialement connecté à Windows.
la source
J'appuie totalement les autres réponses, mais je voudrais souligner une autre méthode qui dit
La méthode ci-dessus m'a renvoyé le nom d'utilisateur au format: DomainName \ UserName . Par exemple, EUROPE \ UserName
Ce qui est différent de:
Qui s'affiche au format: UserName
Et enfin:
qui a donné:
NT AUTHORITY\IUSR
(lors de l'exécution de l'application sur le serveur IIS) etDomainName\UserName
(lors de l'exécution de l'application sur un serveur local).la source
Request
ne fonctionne que si vous êtes une application Web. C'est un exemple deSystem.Web.HttpRequest
Utilisation:
Ce sera le nom de connexion.
la source
Vous pouvez également essayer d'utiliser:
Comme ça...:
J'espère que cela vous a été utile.
la source
J'ai essayé plusieurs combinaisons de réponses existantes, mais elles me donnaient
J'ai fini par utiliser
Ce qui m'a donné le nom d'utilisateur du domaine des utilisateurs réels uniquement.
la source
Cela vous donnera une sortie - votre_nom_utilisateur
la source
Utiliser
System.Windows.Forms.SystemInformation.UserName
pour l'utilisateur réellement connecté carEnvironment.UserName
renvoie toujours le compte utilisé par le processus en cours.la source
Juste au cas où quelqu'un cherche le nom d'affichage de l' utilisateur par opposition au nom d'utilisateur , comme moi.
Voici le régal:
Ajoutez une référence à
System.DirectoryServices.AccountManagement
dans votre projet.la source
J'ai essayé toutes les réponses précédentes et trouvé la réponse sur MSDN après qu'aucune de ces réponses n'ait fonctionné pour moi. Voir 'UserName4' pour le bon pour moi.
Je suis après l' utilisateur connecté , comme indiqué par:
Voici une petite fonction que j'ai écrite pour les essayer tous. Mon résultat est dans les commentaires après chaque ligne.
L'appel de cette fonction renvoie le nom d'utilisateur connecté par retour.
Mise à jour: je voudrais souligner que l'exécution de ce code sur mon instance de serveur local me montre que Username4 renvoie "" (une chaîne vide), mais UserName3 et UserName5 renvoient l'utilisateur connecté. Juste quelque chose dont il faut se méfier.
la source
Voici le code (mais pas en C #):
Voici le code (maintenant aussi en C #):
la source
essaye ça
maintenant ça a l'air mieux
la source
Pour une application Windows Forms qui devait être distribuée à plusieurs utilisateurs, dont beaucoup se connectaient via vpn, j'avais essayé plusieurs méthodes qui fonctionnaient toutes pour mes tests de machine locale mais pas pour d'autres. Je suis tombé sur un article Microsoft que j'ai adapté et qui fonctionne.
la source
Obtenez le nom d'utilisateur Windows actuel:
la source
Au cas où cela serait utile à d'autres, lorsque j'ai mis à niveau une application de l'application c # .net 3.5 vers Visual Studio 2017, cette ligne de code a
User.Identity.Name.Substring(4);
généré cette erreur " startIndex ne peut pas être plus long que la longueur de la chaîne " (il n'a pas reculé auparavant).Il était heureux quand je l'ai changé,
System.Security.Principal.WindowsIdentity.GetCurrent().Name
mais j'ai fini par utiliserEnvironment.UserName;
pour obtenir l'utilisateur Windows connecté et sans la partie domaine.la source
J'ai parcouru la plupart des réponses ici et aucune ne m'a donné le bon nom d'utilisateur.
Dans mon cas, je voulais obtenir le nom d'utilisateur connecté, tout en exécutant mon application à partir d'un autre utilisateur, comme lorsque Maj + clic droit sur un fichier et "Exécuter en tant qu'utilisateur différent".
Les réponses que j'ai essayées m'ont donné le nom d'utilisateur «autre».
Ce billet de blog fournit un moyen d'obtenir le nom d'utilisateur connecté, ce qui fonctionne même dans mon scénario:
https://smbadiwe.github.io/post/track-activities-windows-service/
Il utilise Wtsapi
la source