Lecture d'une clé dans la base de registre HKLM

cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 - 18 mai 2011 à 01:15
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 - 21 mai 2011 à 18:59
Bonjour

Malgré des tentatives hélas vaines je me tourne vers vous pour savoir si il y a une procédure particulière pour lire la valeur d'une clé dans la base de registre dans la partie HKEY_LOCAL_MACHINE car j'ai systématiquement un message comme quoi il est impossible d'ouvrir la clé que je souhaite lire.

Voici le bout de code qui bloque, j'ai essayé d'autres variantes mais ca ne fonctionne pas :

 Dim objShell
        Dim strKey As String
        Dim strDirectXVersion as string = ""
        strKey= "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DreamShield_750b8e59-d33a-4626-b2f5-f92344270dff" 
        Try
            objShell = CreateObject("WScript.Shell")
            strDirectXVersion = objShell.RegRead(strKey)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        MsgBox(strDirectXVersion.ToString)



bien sur j'ai vérifié que la clé existe bien, j'ai même exécuté le code en mode administrateur, mais ca ne change rien, alors que faut il faire pour lire le contenu des clefs dans HKLM ?

en revanche la commande REG.exe fournit un résultat mais bon faire un shell c'est pas vraiment le pied

D'avance merci pour vos lumières

bidouille007

7 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 mai 2011 à 13:52
Bonjour,
Essaie ceci, cela fonctionne. C'est sur les dossiers et fichiers cachés.


'permet de lire une valeur dans la base de registre
        WshShell = CreateObject("Wscript.Shell")
        MsgBox(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue")) 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur


A mon avis il manque une donnée à la fin de ta clé: le paramètre!
Le Pivert
1
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
20 mai 2011 à 11:46
bon bein je vois que vous êtes tous inspirés par mon souci.

Je précise que je suis sous vb.net 2010 avec seven x64.
L'application est compilé en x86
J'ai requis dans le manifest de l'application le niveau administrator

Et avec tout ca le shell ne fonctionne pas en effet il s'avère que la clef HKLM ne soit pas accessible, j'ai essayé donc avec un shell de REG.exe, un processus, et même un batch si quelqu'un à une idée pour me sortir de cette impasse je suis preneur.

D'avance merci


bidouille007
0
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
21 mai 2011 à 00:47
Merci Pivert pour ton aide qui hélas ne fonctionne pas

j'ai modifié la clef par celle ci mais ca ne change rien :

 Dim WshShell = CreateObject("Wscript.Shell")
        MsgBox(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DreamShield_750b8e59-d33a-4626-b2f5-f92344270dff\InstallLocation"))


avec cette mouture de ton code ou j'ai juste changé la clé à lire, j'ai même pas le msgbox qui s'affiche,le logiciel a comme le hoquet et bug plus ou moins, en revanche avec ta clef ca marche sans souci et le msgbox affiche 1, donc la question que je me pose quelle est la particularité de cette foutue clef qui est de type reg_sz pour que ca foire la requête ?

Encore merci

bidouille007
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
21 mai 2011 à 07:54
J'ai fait un essai toujours avec la même clé avec une valeur reg_sz:
HelpID (à droite dans la base de registre)et cela me retourne:
shell.hlp#51104
Il faut que tu recherches de ce côté là

        'permet de lire une valeur dans la base de registre
        WshShell = CreateObject("Wscript.Shell")
        MsgBox(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\HelpID")) 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur




Le Pivert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
21 mai 2011 à 15:13
Bonjour bel oiseau

Mais idem, ton code qui accède à une clef reg_sz fonctionne mais hélas ne fonctionne pas pour une clé se trouvant dans Uninstall, j'ai d'ailleurs testé une autre clé dans Uninstall et j'ai le même problème, il doit y avoir quelque chose qui empêche l'accès d'ailleurs je viens de tomber sur un bout de code qui a mis à jour une autre clé WOW6432NODE qui contient elle aussi une clé uninstall.

Voici le bout de code en question :
       Dim Cle As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", True)
        Dim Nombre_de_cle As String
        Dim teto(200) As String
        Dim tote(200) As String
        Dim titi As Integer = 0
        Nombre_de_cle = Cle.SubKeyCount.ToString() '' compte le nombre de sous clés
        For Each sous_cle As String In Cle.GetSubKeyNames() '' pour chaque valeurs dans les sous clés
            Dim tempKey As RegistryKey = Cle.OpenSubKey(sous_cle) '' on ouvre les sous clés
            Try
                titi = titi + 1
                teto(titi) = tempKey.GetValue("InstallLocation").ToString() '' on récupère la valeur contenue dans DisplayName
                tote(titi) = tempKey.Name
                If teto(titi) "" Then titi titi - 1
            Catch ex As Exception
                titi = titi - 1
            End Try
        Next
        MsgBox(titi)
        For ii As Integer = 1 To titi
            MsgBox(teto(ii) & " - " & tote(ii))
        Next


j'ai bien tenté avec cette méthode de pointer directement sur la clé qui m'intéresse mais ca marche pas

Pourrais tu faire des essais dans la cle Uninstall pour voir si tu as aussi le problème ?


Je me demande quand même si la clé que je veux lire est bien installée car le programme fonctionne en x86 et la clé ne se trouve pas dans WOW6432NODE.

Merci encore

bidouille007
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
21 mai 2011 à 15:36
Cela fonctionne avec la clé Windows Media Player:

        'permet de lire une valeur dans la base de registre
        WshShell = CreateObject("Wscript.Shell")
        MsgBox(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Windows Media Player\UninstallString")) 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur


Tu devrais ouvrir le registre et regarder si ta clé existe bien avec sa valeur!


Le Pivert
0
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
21 mai 2011 à 18:59
Pivert voici l'export de la clé en question, comme tu vois elle existe bien.

En revanche je n'ai pas sur mon PC la clé de Windows Media Player pourtant j'ai bien le lecteur windows Media ??

Export de la base de Registre

Un truc de ouf

Une idée ?

bidouille007
0
Rejoignez-nous