2011-09-16 5 views
1

Je souhaite supprimer le noeud suivant du registre. Comment puis-je le faire?Gestion du registre en C#

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381} 

J'ai ceci:

string key = "D9AC2148-5E15-48AD-A693-E48714592381"; 
StringBuilder sb = new StringBuilder(key); 
RegistryKey k = Registry.ClassesRoot.OpenSubKey("Wow6432Node\\CLSID", true); 

Comment dois-je procéder?

+2

Voir la réponse de Jon Skeet ici: http://stackoverflow.com/questions/531151/how-to-delete-registry-value-in-c – Otiel

+2

Que 'sb' a à voir avec quoi que ce soit. –

Répondre

1

Vous pouvez utiliser la méthode DeleteSubKey:

string key = "{D9AC2148-5E15-48AD-A693-E48714592381}"; 
Registry.ClassesRoot.DeleteSubKey(@"Wow6432Node\CLSID\" + key); 
+0

ne va pas fonctionner pour une cible 32 bits –

+0

@Darin Dimitrov Qu'est-ce que les accolades qui enveloppent le GUID signifie. Quand j'ai utilisé sans accolades, je ne pouvais pas ouvrir la sous-clé. Mais j'ai utilisé {D9 ... 81}, je pourrais l'ouvrir. – Rauf

+0

@Rauf, ils sont juste une partie du nom devrait donc être inclus. –

2

Vous devez prendre en compte registry redirection; c'est le vrai problème ici. Sur une machine 32 bits, la clé dont vous avez besoin n'a pas WoW6432Node dans le chemin.

Vous essayez de supprimer

HKEY_CLASSES_ROOT\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381} 

de la vue 32 bits du registre. Microsoft est très clair que vous ne devriez pas coder en dur le code WoW6432Node dans vos applications:

Les clés redirigées sont mappées à des emplacements physiques sous Wow6432Node. Par exemple, HKEY_LOCAL_MACHINE \ Software est redirigé vers HKEY_LOCAL_MACHINE \ Software \ Wow6432Node. Toutefois, l'emplacement physique des clés redirigées doit être considéré comme réservé par le système. Les applications ne doivent pas accéder directement à l'emplacement physique d'une clé, car cet emplacement peut changer.

supprimer Alors cette touche en appelant

DeleteSubKey(@"HKEY_CLASSES_ROOT\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381}") 

Mais utiliser le redirecteur pour vous assurer que vous utilisez sur la vue 32 bits du registre.

En .NET, vous pouvez réaliser ce dont vous avez besoin de deux manières.

  1. Ciblez x86 et laissez la redirection faire le travail pour vous.
  2. Si vous ciblez x64 ou AnyCPU, vous devez utiliser RegistryView.Registry32 (nouveau dans .NET 4) pour ouvrir une vue 32 bits du registre. Si vous n'avez pas .NET 4 alors vous devez P/Invoke.