2013-06-27 2 views
4

J'essaie d'obtenir le nom de l'utilisateur actuellement connecté dans C# - pas le nom du compte que je pourrais trouver facilement dans Environment.UserName. Je voudrais énumérer les dossiers sur MyComputer comme l'explorateur le fait. Comment est-ce que je pourrais faire ceci ou est-ce qu'il y a une autre manière d'obtenir le nom correct de l'utilisateur?Nom d'utilisateur actuel si le nom du compte a changé

Merci d'avance.

+0

Fournissez ce que vous avez fait. –

+2

Je ne suis pas sûr de ce que vous demandez ici. Pourriez-vous donner un exemple plus illustratif de ce que vous essayez de faire? Je ne sais surtout pas ce que «je voudrais énumérer les dossiers sur MyComputer comme le fait l'explorateur», et comment cela correspond au reste de votre question. –

Répondre

1

Utilisez,

string windowLoging = WindowsIdentity.GetCurrent().Name; 

ou

string windowsLogin = Page.User.Identity.Name; 

ou

string windowsLogin = Environment.GetEnvironmentVariable("USERNAME"); 
+0

Disons que nous avons un compte nommé "Admin" sur la machine. Si l'utilisateur change le nom de ce compte d'utilisateur dans le panneau de configuration, c'est-à-dire "Harald", l'explorateur affiche le dossier mes documents comme "Harald" et non "Admin". Toutes les fonctions comme Identity.name ou Environment.UserName obtiennent le résultat "Admin". Comment puis-je obtenir le nom d'utilisateur modifié (i.E: "Harald") de l'utilisateur actuellement connecté? –

+0

@HaraldPitro, j'ai édité ma réponse! – zey

+0

Tout ce code fournit l'utilisateur d'origine Nom - PAS le nom du compte modifié. Dans l'exemple tout ce code fournit "Admin" - mais je cherche un moyen d'obtenir le nom actuel de "Admin" - c'est "Harald" comment il affiche. –

2

Essayez d'utiliser:

System.Security.Principal.WindowsIdentity.GetCurrent().Name Cela devrait retourner le compte de l'utilisateur actuellement connecté en nous er, et leur nom.

Si cela ne fonctionne pas après un changement de nom d'utilisateur, une autre méthode consisterait à obtenir le SID de l'utilisateur actuel, puis de rechercher un nom d'utilisateur correspondant à ce SID. A défaut, prenez le SID et essayez de trouver un utilisateur correspondant via WMI ou via le registre. Les instructions pour le faire manuellement sont ici:

Si vous pouvez confirmer manuellement que l'une de ces méthodes renvoie le NOUVEAU nom d'utilisateur, il vous suffit de l'implémenter en code, avec des appels WMI ou un accès au registre.

+0

devrait attraper 'SecurityException' avec ceci (éventuellement le nom de l'environnement de retour que vous utilisez maintenant comme une retombée) – Sayse

+1

Votre lien me mène à la solution: SelectQuery query = new SelectQuery (" Win32_UserAccount ", string.Format (" Domain = '{0}' ", Environnement.Nom de la machine)); ManagementObjectSearcher searcher = nouveau ManagementObjectSearcher (requête); foreach (ManagementObject mObject dans searcher.Get()) { \t Console.WriteLine ((chaîne) mObject ["Nom"] + "\ t" + (chaîne) mObject ["FullName"]); "FullName" est la propriété que j'ai recherchée. Merci beaucoup. –

+0

Vous devriez publier cette solution comme réponse. Bon travail pour le comprendre – damienc88

0

@ damienc88 Votre lien me conduit à la solution:

SelectQuery query = new SelectQuery("Win32_UserAccount", string.Format("Domain='{0}'", Environment.MachineName)); 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
    foreach (ManagementObject mObject in searcher.Get()) 
    { 
     Console.WriteLine((string)mObject["Name"] + "\t" + (string)mObject["FullName"]); 
    } 

"FullName" est la propriété que je l'ai cherché. Merci beaucoup. - Harald Pitro

Questions connexes