Je dois obtenir une valeur qui identifie de manière unique la session de connexion de l'utilisateur de Windows actuelle. Ceci est pour une application WinForms, pas ASP.NET. Je vais récupérer cela de plusieurs processus afin qu'il doit renvoyer la même valeur lorsqu'elle est extraite dans la même session de connexion. Il doit seulement être unique sur la machine actuelle pendant la durée de toutes les sessions utilisateur - par ex. jusqu'à ce que la machine soit ensuite redémarrée. p>
Je pense que le ID de connexion Windows Logon est le droit chose, mais semble un peu une douleur à récupérer. Y a-t-il autre chose ou un moyen plus simple d'obtenir cela? p>
Je vais utiliser l'ID pour inclure dans une adresse d'un service de tuyaux nommé pour communiquer entre deux processus exécutés sur la machine. Je souhaite inclure l'ID de connexion pour éviter les conflits lorsqu'il y a plusieurs utilisateurs connectés, y compris peut-être plusieurs sessions du même utilisateur. P>
4 Réponses :
Si je vous comprends correctement, vous pouvez générer un GUID p>
Désolé, je n'ai pas précisé que cela doit être identique à partir de plusieurs processus. c'est-à-dire qu'il faut identifier la session de connexion, pas seulement être unique
Vous pouvez essayer environnement.userdomainName Code> & environnement.Ausername < / code> p>
Pour assurer un identifiant unique unique pour chaque session d'utilisateur forte> Je suppose que vous devrez utiliser la méthode douloureuse que vous avez mentionnée - Comment obtenir le SID de connexion en C # . P>
Et si l'utilisateur est connecté deux fois?
Le même utilisateur peut-il se connecter à une machine à deux reprises en utilisant les mêmes informations d'identification? J'ai toujours pensé que vous seriez redirigé à votre session existante. Besoin de tester je suppose. :)
@Zach oui je suppose que vous pouvez. Bien que l'utilisation de RDP vous frappe à votre compte d'origine. Mais que diriez-vous d'un service en cours d'exécution avec un identifiant d'utilisateur et que l'utilisateur est connecté à la machine.
@YeTanotherUser, je suppose que je ne dirigerais pas les services comme une personne réelle, mais sous un compte de service (domaine ou local). :) Vous vous demandez si vous pouvez obtenir cela de Winstation? Vraisemblablement, même s'ils se sont connectés deux fois, ils auraient différents identifiants de winstation? Les services fonctionnent généralement dans 0, mais je le confirmerais.
@Zach, ce que vous faites est une meilleure pratique recommandée, ce dont je parlais était une solution possible. :) Si c'est une application de bureau Windows régulière (exclure le serveur Win Server, le serveur Terminal Server et Windows), je ne pense pas que c'est réalisable d'avoir deux sessions utilisateur sur la même machine. Mais alors je pourrais avoir tort.
@Yeta: un utilisateur unique peut avoir plusieurs sessions interactives avec RDP ou Server multipoint ( Microsoft.com /windows/multipoint/default.aspx ) tant que la stratégie est configurée de cette façon. Cependant, vous venez de poster un lien vers la même solution que l'OP mentionnait qu'il essayait d'éviter, de sorte que cela n'aide pas.
@Gabe: Je sais - je n'ai pas réalisé que c'était le même lien qu'après que je l'ai posté. C'est la raison pour laquelle j'ai mentionné explicitement sa même méthode douloureuse. J'ai regardé autour de vous ne pouvions pas trouver une approche alternative. BTW MPS est intéressant.
Merci pour ce code utile. Veuillez noter que l'identifiant de session d'origine n'est pas unique. Lorsque l'utilisateur se déconnecte et se connecte à nouveau, cela reste la même valeur.
Yup session ID n'est pas unique, je ne sais pas pourquoi c'est la réponse acceptée
@Paulm, la session est unique au moment du moment de toutes les sessions ouvertes, et qui résout la tâche de OP: Adressant les tuyaux nommés. Lorsque l'utilisateur se déconnecte, ce sont des processus sont destructions. Ils n'interfèrent donc pas avec les sessions ultérieures de l'utilisateur. Toutefois, si le même utilisateur est connecté à différentes sessions en même temps, les résultats sont uniques.
Réponse simple! (Processus.getCurrentCrocess (). SéanceID)
Si je comprends bien, ce dont vous avez besoin, c'est ceci:
SID: S-1-5-5-X-Y Nom: Session de connexion Description: une session de connexion. Les valeurs X et Y pour ces PEID sont différentes pour chaque session. P>
identificateurs de sécurité bien connus dans les systèmes d'exploitation Windows http://support.microsoft.com/kb/243330 p>
Quelqu'un a demandé quelque chose de similaire ici: P>
Comment obtenir la connexion SID en C # P>
Ils ont une bonne réponse là-bas, mais je veux ajouter mon propre p>
C'est ma solution: P> < Pré> xxx pré> p>
Si l'utilisateur se déconnecte et se connecte, est-il acceptable d'obtenir le même ID?
Non, cela devrait être un autre identifiant car c'est une autre session.