IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[vb.net]Impossible de retourner le nom de l'utilisateur dans un service ?


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut [vb.net]Impossible de retourner le nom de l'utilisateur dans un service ?
    Bonsoir à tous

    je cherche à récupérer le nom de l'utilisateur qui à ouvert la session XP, par exemple "Bruno" ou "Isabelle",

    j'essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox System.Environment.UserName.toString
    mais ça me retourne "System"

    Quelqu'un a-t'il une idée ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Et avec My.User.Name ?
    (\ _ /)
    (='.'=)
    (")-(")

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    bonjour

    voici la source msdn

    Bibliothèque de classes .NET Framework
    Propriété Environment.UserName

    Obtient le nom d'utilisateur de la personne qui a lancé le thread en cours.

    [Visual Basic]
    Public Shared ReadOnly Property UserName As String
    [C#]
    public static string UserName {get;}
    [C++]
    public: __property static String* get_UserName();
    [JScript]
    public static function get UserName() : String;

    Valeur de propriété

    Nom de la personne ayant ouvert une session sur le système et lancé le thread en cours.
    http://msdn.microsoft.com/library/fr...rtiesTopic.asp

    + la faq developpez.com
    http://faqvbnet.developpez.com/?page=syst#syst_username
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par FRED.G
    Et avec My.User.Name ?
    Ca fonctionne effectivement dans un formulaire, mais j'écris un service Windows et là celà ne retourne plus rien du tout...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par notalp
    Là ça me retourne à nouveau "System" (dans mon service) alors que dans un form, celà me retourne "Bruno", alors qu'avec la solution de Fred.G celà me retournait (dans un form) "MaMachine\Bruno".

    Si il retourne "System" dans mon service, c'est parce que c'est "System" qui a lancé le service et donc le thread ?

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Bah d'apres ce que je comprend de la notice MSDN ... c bien ca ...
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Notalp a écrit

    Nom de la personne ayant ouvert une session sur le système et lancé le thread en cours.
    Mon idée est que ça retourne System parce que l'instruction Environment.Username est lancée par un service et que mon service serait lancé par le système ?

  8. #8
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    Si ça te retourne System c'est parce ton service windows est lancé par le compte des services windows qui s'appelle .... System ... tout simplement
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par dev01
    Salut .

    Si ça te retourne System c'est parce ton service windows est lancé par le compte des services windows qui s'appelle .... System ... tout simplement
    Merci, c'était bien la conclusion à laquelle j'étais arrivée. La question est comment retourner dans un service le nom de l'utilisateur qui a ouvert une session windows XP. Faut-il passer par des API, si oui, quelqu'un sait-il comment ?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Registry.CurrentUser?

    Quoique le problème reste le même vu qu'un service peut démarrer avant que l'utilisateur soit loggué, donc je ne sais pas comment il va réagir...

    EDIT: en fait je n'ai pas lu assez profondément, ça ne fait que donner un accès à la clé HKEY_CURRENT_USER.
    Mais il y a peut-être moyen de récupérer l'information que tu désires dans le registre?!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Salut,

    Merci pour ta réponse, effectivement ça ne retourne que le nom de la clé, mais dans l'aide il y a un exemple qui permet de lire le contenu.

    Je pourrai tester ça demain, et je vous tiens informé du résultat...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    NicolasJolet a écrit: Registry.CurrentUser?
    J'ai donc testé plein d'espoir le fait d'aller chercher le nom d'utilisateur dans la clé suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      returnUser = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer").GetValue("Logon User Name")
    Je ne sais pas si c'est le bon ni le seul endroit, mais en tous cas j'y trouve le bon utilisateur en fonction de l'utilisateur qui a ouvert la session windows.

    Mais, à nouveau, ça marche quand je l'utilise dans une application form ou console MAIS PAS quand je l'utilise directement dans un service ou dans une application lancée par un service.

    C'est vraissemblablement un problème de droits, mon service est lancé avec "compte système local" , autoriser à interagir avec le bureau, que puis-je faire ???

  13. #13
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut user connecté via les Api
    Personnellement, je passe historiquement par les API, essayes voir :

    Option Strict On
    Option Explicit On
    Public Class clsCurrentUser
    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
    ReadOnly Property SystemUser() As String
    Get
    SystemUser = New String(Chr(0), 100)
    GetUserName(SystemUser, 100)
    Return Left(SystemUser, InStr(SystemUser, Chr(0)) - 1)
    End Get
    End Property
    End Class
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci de ressortir cette bonne vieille discussion qui m'intéresse toujours.

    J'ai créer une classe clsCurrentUser dans un projet WindowsForm.

    dans un form, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim aaa As New clsCurrentUser
    msgBox(aaa.SystemUser)
    quand j'exécute j'ai une erreur "AccessViolationException" et "Attempted to read or write protected memory"

    Une idée ?

Discussions similaires

  1. Nom du serveur et nom de l'utilisateur dans macro-variables
    Par delph_le dans le forum Administration et Installation
    Réponses: 2
    Dernier message: 04/11/2014, 22h03
  2. Réponses: 2
    Dernier message: 19/02/2009, 16h21
  3. [VB.Net]Procédure Stocké retournant une valeur
    Par waldo2188 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/05/2005, 12h56
  4. Réponses: 7
    Dernier message: 03/12/2004, 12h40
  5. [VB.NET] Impossible de lire le contenu du datagrid
    Par jagdjg dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/05/2004, 21h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo