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.
- Ciblez x86 et laissez la redirection faire le travail pour vous.
- 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.
Voir la réponse de Jon Skeet ici: http://stackoverflow.com/questions/531151/how-to-delete-registry-value-in-c – Otiel
Que 'sb' a à voir avec quoi que ce soit. –