Sto eseguendo la mia applicazione compilata come x86, ed è in esecuzione su Windows 64 bit.Lettura e scrittura di chiavi di registro x86 e x64 dalla stessa applicazione
Per risolvere un problema con le associazioni di file ClickOnce, voglio leggere alcuni valori CLSID dalla vista x86 del registro e quindi scriverli nella vista x64.
Per essere chiari, questo significa che da un'applicazione x86 voglio contemporaneamente leggere dalla vista del registro x86 e quindi scrivere nella vista del registro x64. Voglio prendere i valori che trovo sotto HKEY_CURRENT_USER\Software\Classes\CLSID\{my clsid}
e scriverli a HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{my clsid}
.
Come devo fare? L'utilizzo di RegistryView
produce risultati imprevisti. Ad esempio, questo OpenSubKey
chiamata restituisce null:
keyPath = @"Software\Classes\CLSID\" + clsid;
var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);
var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree);
Se uso RegistryView.RegistryDefault
o RegistryView.Registry64
ma restituisce la chiave - ma vorrei aspettare di tornare nulla quando si utilizza Registry64
perché quella chiave non esiste nella visualizzazione x64 e non dovrebbe esserci alcun reindirizzamento.
Si sta utilizzando un RegistryView
la cosa appropriata da fare, o dovrei utilizzare direttamente WinAPI?
Grazie @Zipper, la risposta era corretta - ho avuto le cose a rovescio nella mia mente (non era ovvio che Registry32 stava raccogliendo roba dal nodo Wow6432Node). – slugster
@Zipper Ho dei dubbi. L'applicazione a 32 bit può accedere all'hive di registro a 64 bit. Non sono sicuro di questo. –
Solo una nota a margine: se si utilizza un .NET prima di .NET4, questo approccio non funzionerà per voi. – Luke