Donner le droit de modifier une clé du registre [Résolu]

Signaler
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
-
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
-
Bonjour tout le monde! J'ai actuellement besoin de modifier une valeur du registre avec mon logiciel, donc voici mon code:

Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background")
key.SetValue("OEMBackground", "1", RegistryValueKind.DWord)
key.Flush()
key.Close()


Le code semble marcher, mais lors de l’exécution il bloque sur la 2eme ligne en disant: "L'exception UnauthorizedException n'a pas été gérée, impossible d'écrire dans la clé de Registre.". Je pense que mon logiciel n'a pas le droit de modifier cette clé de registre, je suis pourtant sur le compte administrateur et ça ne marche pas même quand je fait clic droit > Exécuter en tant qu’administrateur. Donc je voudrais savoir comment corriger cette erreur, comment donner le droit à l'utilisateur du logiciel de modifier cette clé. Merci infiniment! :)

PS: Excusez moi si je me trompe de section, mais je vois pas ou je peut poster ça sinon.

21 réponses

Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
J'ai trouvé un solution un peut bancale au problème, si quelqu'un à le même bug que moi, utiliser ce programme et modifié le:
LIEN
Contentez vous d'y coller votre code , votre interface et de modifier le nom et information, merci à PHILOUVB pour ce code!

Bonjour,

Propriétés du projet / onglet application.
Cliquer sur afficher les paramètres windows.
remplacer :
 <requestedExecutionLevel level="asInvoker" uiAccess="false" />

par :
<requestedExecutionLevel  level="requireAdministrator"  uiAccess="false" />

VS va redémarrer en mode administrateur.
Lorsque tu compilera ton projet, ces paramètres seront pris en compte et ton appli demandera ses droits à chaque démarrage.
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Merci beaucoup pour ta réponse.

Mais ça ne semble pas marcher et j'ai toujours le droit à la même erreur, d’ailleurs, je me suis trompé, ce n'est pas l'exception "UnauthorizedException", mais "UnauthorizedAccessException", donc je n'ai toujours pas le droit de modifier cette clé du registre. j'ai donc essayé le code suivant:

Try

            Dim rs As New RegistrySecurity()
            Dim user As String = Environment.UserDomainName & "" & Environment.UserName

            rs = New RegistrySecurity()
            rs.AddAccessRule(New RegistryAccessRule(user, _
               RegistryRights.SetValue, _
              AccessControlType.Allow))


            Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background")
            key.SetAccessControl(rs)
            key.SetValue("OEMBackground", "1", RegistryValueKind.DWord)
            key.Flush()
            key.Close()

        Catch ex As Exception
            MsgBox(ex.Message & "; " & ex.Data.ToString & "; " & ex.HelpLink & "; " & ex.Source & "; " & ex.StackTrace & "; " & ex.TargetSite.ToString & ".")
        End Try


Mais ça ne semble pas marcher non plus. Je ne comprend pas comment me donner le droit de modifier cette clé. Je ne sait pas si vous savez vous servir de RegistrySecurity parce que j'ai peut être fait une erreur. Merci encore.

Normalement, tu dois vois dans la barre de titre de l'ide visual basic, la mention administrateur. Est-ce le cas ?
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Oui, ça m'indique bien que je suis en administrateur.

Peut-être en désactivant les paramètres de sécurité ClickOnce (Onglet sécurité)

C'est sur quel OS ?
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Je travaille sous Windows 7 Édition Familiale Premium 64-bit SP1.
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Et ClickOnce est déjà inactif.

Tu peux essayer ceci pour w7:
Dim key As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
key = key.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background")
'... suite de ton code
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Merci encore, j'ai essayé ce code mais toujours le même problème, exactement la même erreur sur la même ligne:

Dim key As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
key = key.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background")
key.SetValue("OEMBackground", "1", RegistryValueKind.DWord)
key.Flush()
key.Close()

Et bien je n'ai plus d'idées, j'ai épuisé tous les stratagèmes.
Bonne soirée quand même
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Merci pour ton aide! Bien que le problème ne soit pas encore résolut, apprécie ton geste. Je vais voir si quelqu'un d'autre vient poster quelque chose d'autre sur le sujet parce que j'ai essayé tout ce que je pouvait, et n'étant pas un pro du VB, je pense pas trouver la solution moi même. En tout cas merci beaucoup!
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Chose assez étrange, j'ai réussi à modifier la clé de registre en modifiant le code suivant:
LIEN
Et ça marche très bien dans ce code avec la ligne suivante:
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground", "1", RegistryValueKind.DWord)

J'ai donc copié cette ligne dans mon code et il ne se passe rien! La clé n'est pas odifié alors que dans l'autre code, celui que j'ai téléchargé et modifié, ça marche avec la même ligne de code! Je ne comprend pas!

J'ai trouvé un solution un peut bancale au problème
La vérité est ailleurs dans le reste de ton code. Et ce n'est pas bien de se contenter d'une 'solution bancale' alors que le fait de rechercher la véritable cause de l'erreur te serait bien plus profitable.
Bon week end quand même
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
J'ai cherché dans le code, mais vraiment il y à aucune différence! Dans tout, j'ai du passer 2 heures à tout regarder je comprend pas. Merci quand même!

C'est pour cela qu'on a inventé le mode 'pas à pas' (F8) ainsi que les espions. Compare les valeurs entre le code fonctionnel et l'autre.
Bon courage
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Je ne comprend pas trop la fonction de F8 comme tu le dit, tu pourrait expliquer s'il te plait? Merci beaucoup!
Messages postés
58
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
14 juillet 2013
3
Je viens de reprendre le code que j'avais fait de manière bancale et je l'ai mis dans un nouveau projet, et je ne peut toujours pas modifier le registre! Là je ne comprend absolument pas, pourtant je lance bien l'application en tant qu'administrateur et je n'ai vu nul pars qu'il faut faire une manipulation spéciale pour autoriser l'application à utiliser le registre, là je ne comprend pas du tout et j'ai bossé au moins 2 mois sur le logiciel, et impossible qu'il puisse écrire ou lire correctement dans le registre!

Bonjour,

C'est pour cela qu'on a inventé le mode 'pas à pas' (F8) ainsi que les espions.


Petite précision, dans VS2012, avec l'IDE "harmonisée", le pas à pas c'est F11