2009-07-02 11 views

risposta

12

Nel caso in cui sia necessario leggere in modo esplicito un valore scritto da un programma a 32 bit in un programma a 64 bit, è corretto codificarlo. Semplicemente perché non c'è davvero altra opzione.

Vorrei ovviamente estrapolarlo in una funzione di supporto. Per esempio

public RegistryKey GetSoftwareRoot() { 
    var path = 8 == IntPtr.Size 
    ? @"Software\Wow6432Node" 
    : @"Software"; 
    return Registry.CurrentUser.OpenSubKey(path); 
} 
+0

Abbastanza corretto - grazie Jared! – marijne

+5

Attenzione: MS dichiara che questo approccio (hardcoding del "Wow6432Node") non è supportato. Vedere http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard

+6

-1: questo comportamento si interrompe in Windows 7/Windows Server 2008 R2, in quanto utilizzano invece le chiavi di registro condivise: http : //msdn.microsoft.com/en-us/library/aa384253 (VS.85) .aspx – Powerlord

16

Il modo corretto sarebbe quello di chiamare l'API Registro nativo e passando la bandiera KEY_WOW64_32KEY a RegOpenKeyEx/RegCreateKeyEx

+0

Va notato che questa soluzione è valida solo quando si parla con pinvoking o si usa il codice C++. – Kyle

+0

@Zenox - È una soluzione perfettamente valida anche quando si utilizza un linguaggio come C#, ovviamente sarebbe stupido usarlo. –

52

Se è possibile modificare la versione .Net di destinazione in v4, è possibile utilizzare la nuova funzione OpenBaseKey, ad es.

RegistryKey registryKey; 
if (Environment.Is64BitOperatingSystem == true) 
{ 
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
} 
else 
{ 
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); 
} 
+1

Questa soluzione funziona molto con il mio test di unità Win7 64bit +. Grazie. – Jirapong

+2

Questo è il modo di leggere il registro. WoW6432Node non dovrebbe essere letto direttamente come Microsoft gestisce questo tramite la loro API e ha detto che potrebbe cambiare in futuro. – Jason

+0

Cosa succede se non puoi passare a 4.x? Usa il metodo sopra? –

Problemi correlati