Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer une clé registre dans HKEY_LOCAL_MACHINE

    14 juin 2017 à 20:03:20

    Bonjour, cela fait plusieurs jours que je cherche à créer une clé registre dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    mais la methode que j'utilise ne fonctionne, pourtant elle fonctionne belle et bien dans HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.Mon application fonctionne en administrateur(windows 7).

    Voici le code que j'utilise, merci d'avance pour votre aide..

        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Try
                Dim CreateLocalMachine As Microsoft.Win32.RegistryKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
                Dim KeyExiste = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
    
                If KeyExiste.GetValue(Application.ProductName) <> Application.ProductName Then '<> signifie différent
                    With CreateLocalMachine
                        .OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
                        .SetValue(Application.ProductName, Application.ExecutablePath)
                    End With
                Else
                    MsgBox("Clé existe déjà !")
                End If
    
            Catch ex As Exception
                MessageBox.Show("Une erreur est survenue !")
            End Try
    
        End Sub



    -
    Edité par ffdu69 15 juin 2017 à 14:16:32

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2017 à 23:59:11

      >> mais aucune de mes méthodes ne fonctionne

      Tu pourrais être plus précis ?

      • Partager sur Facebook
      • Partager sur Twitter

      zdimension - https://zdimension.fr/

        15 juin 2017 à 14:18:39

        désolé je me suis mal exprimé, autant pour moi, je voulais dire que la méthode actuelle (voir code au dessus) que j'utilise ne fonctionne pas et je ne connais pas d'autre méthode. Si vous pouvez m'aidez svp.
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2017 à 14:34:08

          Il dit quoi le débogueur ?
          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            15 juin 2017 à 14:39:45

            Le débogueur ne m'affiche aucun message d'erreur, comme si l'action a bien été réalisé mais sans rien créer dans le registre.
            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2017 à 14:51:29

              Dégagez le Try/Catch.
              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                15 juin 2017 à 15:00:49

                Même en enlevant les Try/Catch sa ne m'affiche aucun message..
                • Partager sur Facebook
                • Partager sur Twitter
                  15 juin 2017 à 15:46:57

                  Vous regardez le résultat dans un regedit 32 ou 64 bits ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                    15 juin 2017 à 15:58:48

                    dans un regedit 64, je tourne sur un windows 7 64Bit.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juin 2017 à 16:06:19

                      ffdu69 a écrit:

                      dans un regedit 64, je tourne sur un windows 7 64Bit.


                      oui mais le programme est il en 64 bits?

                      Voyez si la lecture de cette clef fonctionne. Si oui il l'a ecrite dans un autre endroit propre au prog 32 bit

                      https://answers.microsoft.com/en-us/windows/forum/windows8_1-performance/wow6432node-registry-startups/481d4851-720f-4084-b1f1-8472c0eb842d

                      -
                      Edité par breizhbugs 15 juin 2017 à 16:08:48

                      • Partager sur Facebook
                      • Partager sur Twitter
                      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                        15 juin 2017 à 16:19:27

                        j'ai essayé mon code avec la syntaxe que vous m'avez conseillé, sa ne fonctionne pas.j'ai exactement le meme comportement qu'avant..
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 juin 2017 à 19:42:10

                          Encore une fois, que veux-tu dire par "ne fonctionne pas" ? Tu veux dire que la clé n'est pas créée, et qu'il n'y a aucune erreur ?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          zdimension - https://zdimension.fr/

                            15 juin 2017 à 22:14:35

                            Oui c'est bien çà. la clé n'est pas créé.>_<
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 juin 2017 à 22:17:46

                              Essaie d'ajouter un paramètre à CreateSubKey.

                              Remplace 

                              .OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")

                              par

                              .OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)

                              Normalement, la fonction OpenSubKey sans paramètres supplémentaires n'ouvre la clé spécifiée qu'en lecture seule.

                              Source : OpenSubKey(String) et OpenSubKey(String, Boolean)

                              • Partager sur Facebook
                              • Partager sur Twitter

                              zdimension - https://zdimension.fr/

                                15 juin 2017 à 22:21:52

                                J'ai déjà essayé mai la clé n'est pas créé.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 juin 2017 à 22:48:11

                                  Je viens de tester sur ma machine, en effet cela ne change rien. Car la clé de base dont tu te sers n'est pas en mode écriture (il faut donc ajouter le "True" à la première fonction, à savoir CreateSubKey, dans ce cas, cela fonctionne merveilleusement bien).

                                  Mais pourquoi t'embêtes-tu à ouvrir trois clés différentes, lorsque faire 

                                  My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True).SetValue(Application.ProductName, Application.ExecutablePath)

                                  Fait tout ? À moins que la vérification de clé existante soit un prérequis obligatoire ?

                                  Sachant que le champ My.Computer.Registry.LocalMachine est équivalent (en fait, il est identique) à [Microsoft.Win32.]Registry.LocalMachine, qui lui-même est défini par :

                                  Public Shared ReadOnly LocalMachine As RegistryKey = RegistryKey.GetBaseKey(RegistryKey.HKEY_LOCAL_MACHINE)

                                  Et la fonction RegistryKey.GetBaseKey crée automatiquement une clé avec un accès en écriture.

                                  Note : je suis tout de même surpris par le fait que lorsqu'une clé est ouverte sans accès en écriture, le framework .NET ignore toutes les requêtes d'écriture silencieusement sans émettre le moindre avertissement. En général, c'est plutôt l'inverse, le moindre faux-pas et c'est l'ArgumentException dans ta face.

                                  -
                                  Edité par zdimension 15 juin 2017 à 22:50:42

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  zdimension - https://zdimension.fr/

                                    17 juin 2017 à 12:26:28

                                    Je désespère, après avoir essayé ta méthode sa ne fonctionne toujours pas !! le message "La clé a été crée !" s'affiche mais la clé n'est pas créé réellement...

                                    -
                                    Edité par ffdu69 17 juin 2017 à 12:27:00

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 juin 2017 à 13:32:58

                                      breizhbugs a écrit:

                                      ffdu69 a écrit:

                                      dans un regedit 64, je tourne sur un windows 7 64Bit.


                                      oui mais le programme est il en 64 bits?

                                      Voyez si la lecture de cette clef fonctionne. Si oui il l'a ecrite dans un autre endroit propre au prog 32 bit

                                      https://answers.microsoft.com/en-us/windows/forum/windows8_1-performance/wow6432node-registry-startups/481d4851-720f-4084-b1f1-8472c0eb842d

                                      -
                                      Edité par breizhbugs 15 juin 2017 à 16:08:48


                                      J'ai pas l'impression que tu ais compris l'importance de mon post....

                                      La clef a bien été crée non pas dans le répertoire que tu indiques mais dans sa redirection automatique en 32 bits dont le chemin est indiqué dans le lien ci dessus.... ?

                                      -
                                      Edité par breizhbugs 17 juin 2017 à 13:33:35

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                        17 juin 2017 à 13:45:16

                                        Oui excuse moi, j'avais vraiment pas compris la dernière fois ou tu voulais en venir, la clé à bien été créé dans HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run, merci beaucoup pour ton aide, mais pourquoi la clé n'est pas créé directement dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, comme celle d'AvastUi ou plusieurs autres ??
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 juin 2017 à 14:31:31

                                          Comme @breizhbugs l'a dit, Windows possède deux versions du registre (en tout cas pour HKLM). Comme ton application est probablement compilée en Any CPU, y'a des chances pour qu'elle tourne en 32. Ce qui fait que la clé est bien dans Wow6432Node.

                                          Essaie donc en remplaçant

                                          My.Computer.Registry.LocalMachine
                                          	.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True).SetValue(Application.ProductName, Application.ExecutablePath)
                                          
                                          par
                                          RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)
                                          	.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True).SetValue(Application.ProductName, Application.ExecutablePath)

                                          Pour forcer l'utilisation de la ruche 64-bits. Note que ceci ne marchera pas si tu lances ton appli sur un Windows 32-bits.

                                          Question : pourquoi diable veux-tu tant que ton application soit inscrite en démarrage dans la ruche 64-bits ? Ça ne changera rien sur le plan fonctionnel, le programme sera quand même exécuté au démarrage...

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          zdimension - https://zdimension.fr/

                                            17 juin 2017 à 14:37:08

                                            windows virtualise la ruche 32 bits en redirigant les demandes systèmes d'un programme 32 vers un sous dossier particulier.

                                            https://msdn.microsoft.com/fr-fr/library/windows/desktop/aa384187(v=vs.85).aspx -> pour le systeme de fichier

                                            https://msdn.microsoft.com/fr-fr/library/windows/desktop/aa384232(v=vs.85).aspx -> pour le registre.

                                            note: y a une fonction de l'api pour désactiver la redirection, mais je ne crois pas qu'elle soit intégrées a la classe registry de .net. Faut la pinvoke sinon. Peut être que des parametres sur certaines fonctions permettent d'indiquer avec quel registre travailler aussi. Bref Lire la doc ou accepter la redirection automatique.

                                            zdimension a écrit:

                                            Question : pourquoi diable veux-tu tant que ton application soit inscrite en démarrage dans la ruche 64-bits ? Ça ne changera rien sur le plan fonctionnel, le programme sera quand même exécuté au démarrage...

                                            Je pense pas qu'il le veuille absolument. Il ne connaissait pas l'existence des deux ruches en fait d'ou son incompréhension sur ce qui se passait ;)

                                            -
                                            Edité par breizhbugs 17 juin 2017 à 14:38:48

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                              17 juin 2017 à 14:49:52

                                              D'accord, je comprend mieux maintenant, j'arrive enfin à créer la valeur dans les 2 clés Mais comment fait-on pour interdire la suppression de la clé ? un exemple:

                                              j'ai désinstallé Avast et lorsque je me rend dans le registre, la clé AvastUi.exe existe encore et lorsque je veux la supprimer, un message m'interdit de le faire alors que je suis connecté en tant qu'administrateur. 

                                              -
                                              Edité par ffdu69 17 juin 2017 à 14:50:20

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 juin 2017 à 14:58:52

                                                Avast a du mal être désinstallé... Il faut un prog special téléchargeable depuis le site avast il me semble?

                                                https://www.avast.com/fr-fr/uninstall-utility

                                                En suivant bien chaque etape!

                                                -
                                                Edité par breizhbugs 17 juin 2017 à 14:59:57

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                                  17 juin 2017 à 15:23:13

                                                  Merci, mais comment fait avast pour interdire la suppression de sa clé registre ? comment fait-on en VB ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 juin 2017 à 15:48:44

                                                    I a un service qui tourne toujours sans doute et qui verifie en surveillant plusieurs reglages de l'ordi qu'aucun virus cherche à le désinstaller "contre son gré"
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **

                                                    Créer une clé registre dans HKEY_LOCAL_MACHINE

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown