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

Services Windows Discussion :

Erreur d'acces a une sous-cle registre


Sujet :

Services Windows

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut Erreur d'acces a une sous-cle registre
    bonjour ,
    je suis entrain d'essayer de lister de maniere simple les sous clé d'une cle de registre dans le but de verifier quels sont les sites de confiance de l'utilisateur
    Pour cela j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        RegistryKey localKey;
     
                if (Environment.Is64BitOperatingSystem)
                {
                    localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry64);
                }
                else
                {
                    localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry32);
                }
     
                try
                {
     
     
     
                    RegistryKey mycle = localKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains", false);
                    string[] souscle = mycle.GetSubKeyNames();
                    foreach (string subKeyName in souscle)
                    {
                        TextWriter file = new StreamWriter(@"C:\Temp\journal.txt", true);
     
                        file.WriteLine(subKeyName + "\n");
                    }
     
     
                }
                catch (Exception e)
                {
                    TextWriter file = new StreamWriter(@"C:\Temp\journal.txt", true);
                    file.WriteLine(e.ToString() + "\n");
                    file.Close();
                }
    le probleme est que dans mon journal je trouve l'exception suivante:

    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
    à testversion1.Service1.OnStart(String[] args) dans c:\users\v-user\documents\visual studio 2010\Projects\testversion1\testversion1\Service1.cs:ligne 40

    je voulais les afficher dans un premier temps puis ensuite changer le code afin de verifier avec la liste des sites approuvés.
    si quelqu'un peut m'aider ce serait sympas

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Merci d'éditer ton message et d'utiliser les balises [code]...[/code] pour faciliter la lecture.

    Quelle est la ligne qui lance l'exception ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    salut et merci pour ta reponse.
    dsl je n'avais pas vu les balises code.
    je ne sais pas mais je pense que le preobleme se trouve a ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
                    RegistryKey mycle = localKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains", false);
                    string[] souscle= mycle.GetSubKeyNames();
    je pense que l'utilisation de la methode GetSubKeyNames() est mauvaise.
    je voulais avoir les sous clé de la clé de registre ouverte dans l'instruction qui precede car celle ci contient les sites de confiance de l'utilisateur.voir piece jointe
    merci beaucoup pour ton aide precieuse Matt

    je veux faire a peu pres comme sur le lien suivant:
    http://stackoverflow.com/questions/1...getsubkeynames
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par johnlobs Voir le message
    dsl je n'avais pas vu les balises code.
    Pas de souci, c'est juste plus agréable à lire avec

    Citation Envoyé par johnlobs Voir le message
    je ne sais pas mais je pense que le preobleme se trouve a ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
                    RegistryKey mycle = localKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains", false);
                    string[] souscle= mycle.GetSubKeyNames();
    Il faudrait que tu sois sûr et certain, car l'erreur que tu as mentionné peut venir d'ailleurs. La meilleure façon de savoir, c'est de debugger (F5). Lorsque l'exception sera lancée, le compilateur te montrera quelle est la ligne fautive.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    je vais aller voir comment debugger car je ne sais pas comment faire avec les services windows et lorsque je mets f5 il me sort une erreur disant qu'il est impossible de debugger un service windows sans son installation .
    mais normalement le code que j'ai mis ci dessus est mon code completet je ne vois pas d'ou est ce que ca peut venir car toutes les methodes je les utilise dans d'autres fonction a part la partie GetSubKeyNames()
    merci

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Quelques pistes à explorer :
    - Est-ce qu'il est possible qu'une GPO empêche de lire ces infos à l'utilisateur qui lance le service ?
    - Est-ce que la clef existe bien sur le poste où tu as lancé le service ?
    - Est-ce que localKey est bien initialisée ? (s'assurer que RegistryKey.OpenBaseKey() ne retourne pas NULL
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    merci pour ta reponse;
    les piste 1 et 2 sont à eliminer car sur la machine les clefs existent et il n'y a pas de gpo qui empeche cela car le service tourne en localsystem.
    il reste la troisieme sur laquelle je vais me focaliser et voir ce que ca donne
    merci beaucoup matt pour tes participations aux forums et le temps consacré pour aider les autres

  8. #8
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    salut
    j'ai consacré ma matinée à tester les pistes que tu m'a donné;
    une chose est sure , c'est que le probleme ne viens pas de la piste 3 car j'arrive à acceder au registre pour verifier certaines cles de registres dans d'autres fonctions mais des que je souhaite lister mon programme n'ecrtit meme plus dans le journal que je crée ce qui est bizarre.
    si tu a une idée ou bien si tu peux tester le code que je donne en haut pour voir ce que ca donne ce serait cool
    merci d'avance

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Etrange effectivement... Je regarderai ça ce soir car je suis en 3.5 au boulot. Qu'y a-t-il à la ligne 40 de ton fichier Service1.cs ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    A la ligne 40 il ya exactement :
    string[] souscle= mycle.GetSubKeyNames();
    merci encore une fois

  11. #11
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    re
    je pense que j'ai une nette evolution dans la recherche du probleme
    en effet je me suis amusé a tatonner un peu n'importe comment et je finis par essayer d'afficher les sous clés d'une des premieres clés de l'arborescence mais de localmachine en l'occurrence SOFTWAR->Ca marche
    donc le probleme ne venait pas de la methode getSubKeyName()
    ensuite j'ai essayer de faire la meme chose mais avec currentuser pour vois si c'etait un preobleme d'autorisation et miracle ca marche MAIS c'est la que je realise qu'il ne m'affiche pas la meme arborescence que celle affichée graphiquement par la base de registre lorsque je suis connecté
    j'en deduit que etant donné que mon service tourne en localsystem,il me donne l'arborescence qui concerne l'utilisateur system
    ma deduction se consolide lorsque j'ajouote des sites de confiance mais ils ne s'affichent pas
    je pense qu'il faut que mon service etant en localsystem doit afficher les sous clefs de l'utilisateur connecte
    -est ce possible? je vais chercher (surement mais j'ai aucune idée de comment faire)
    -est ce que j'avance est logique??
    je reste ouvert a toute sorte de proposition qui pourrait m'aider
    merci d'avance

  12. #12
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    j'en deduit que etant donné que mon service tourne en localsystem, il me donne l'arborescence qui concerne l'utilisateur system
    C'est cela, l'utilisateur courant pour ton service est LocalSystem donc la clé registre de l'utilisateur courant (HKEY_Current_User) est celle de LocalSystem(HKEY_USERS\.DEFAULT).

    Pour accéder à la clé registre d'un utilisateur spécifique tu peux utiliser HKEY_USERS\SID de l'utilisateur.

  13. #13
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    merci meziantou pour ta piste qui me semble etre ma solution
    ce que je ne comprends pas c'est comment utiliser HKEY_USERS\SID
    est ce que c'est HKEY_CURRENT_USER\SID\CHEMIN_DE_MA_CLE????
    Merci encore une fois pour ta reponse et votre disponibilité a tous

  14. #14
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    De la même façon que pour n'importe quelle clé du registre. Tu ouvres la ruche voulue puis tu ouvres la clé souhaitée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RegistryKey rk = Registry.Users;
    rk.OpenSubKey(...);
    MSDN fournit un exemple avec Users.
    http://msdn.microsoft.com/en-us/libr...try.users.aspx

  15. #15
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour
    je voudrais renouveller mes remerciements pour votre aide precieuse.
    concernant mon probleme, j'arrive facilement a afficher les cle ainsi que les sous clé de mon arborescence mais des que j'arrive a Domains qui contient les sites de confiance,il n'y a aucun site qui s"affiche alors que j'en ai normalement
    j'en conclut que je suis dans l'arborescence du system car mon service tourne en local system

    j'aimerais donc avoir le chemin a mettre dans la methode opensubkey("chemin") pour etre dans l'arborescence de l'utilisateur connecté.
    j'ai essayer de chercher à propos de HKEY_USERS\SID mais rien

    merci encore une fois pour l'aide je galere avec ca depuis un petit moment deja voici mon code mais pour les test meme si vous ajoutez des sites de confiance,ils ne sont pas affichés par contre si on enleve Domains du chemin il affichera les sous clés(dont Domains fait partie)

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
      TextWriter file = new StreamWriter((@"C:\temp\journal.txt",true);
                file.WriteLine("ecriture okkk" + "\n");
     
                try
                {
                    String[] values = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains").GetSubKeyNames();
     
                    foreach (String value in values)
                    {
     
                            file.WriteLine(" valeur interdite:" + value + "\n");
                    }
                    file.Close();
     
                }
                catch (Exception e)
                {
     
                    file.WriteLine(e.ToString() + "\n");
                    file.Close();
                }

Discussions similaires

  1. Comment retrouver les sous-cles d'une clé du registre
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2008, 11h56
  2. Réponses: 3
    Dernier message: 24/04/2007, 15h54
  3. Accés a une base de donnée sous trouvant sur un PC distant
    Par haganidjamel dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 15/03/2006, 09h38
  4. []Erreur d'accès à la Base de registres
    Par oulai_evado dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/12/2005, 13h59
  5. Erreur d'acces a une base de donnees: idapid32.dll
    Par mevellea dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/10/2005, 19h10

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