La mia applicazione .NET (qualsiasi CPU) deve leggere un valore di registro creato da un programma a 32 bit. Su Windows a 64 bit questo va sotto la chiave Wow6432Node nel registro. Ho letto che non dovresti scrivere hard-code sul Wow6432Node, quindi qual è il modo giusto per accedervi con .NET?Come aprire una chiave di registro WOW64 da un'applicazione .NET a 64 bit
risposta
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);
}
Il modo corretto sarebbe quello di chiamare l'API Registro nativo e passando la bandiera KEY_WOW64_32KEY
a RegOpenKeyEx/RegCreateKeyEx
Va notato che questa soluzione è valida solo quando si parla con pinvoking o si usa il codice C++. – Kyle
@Zenox - È una soluzione perfettamente valida anche quando si utilizza un linguaggio come C#, ovviamente sarebbe stupido usarlo. –
Estendere la risposta di Anders, c'è un good example of wrapping the resulting handle in a .NET RegistryKey object on Shahar Prish's blog - assicuratevi di leggere i commenti troppo però.
Si noti che l'uso non verniciato di the pinvoke.net wrapper of RegOpenKeyEx è pieno di problemi.
Questa è un'ottima soluzione. – adzm
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);
}
Questa soluzione funziona molto con il mio test di unità Win7 64bit +. Grazie. – Jirapong
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
Cosa succede se non puoi passare a 4.x? Usa il metodo sopra? –
- 1. Come posso leggere la chiave del registro a 64 bit da un processo a 32 bit?
- 2. Interop da 64 a 32 bit - come?
- 3. Accesso al registro di Windows tramite .NET?
- 4. Leggere il registro a 64 bit da un'applicazione a 32 bit
- 5. Come ENUM moduli in un processo a 64 bit da una a 32 bit WOW elaborare
- 6. Registro di sistema Windows a 64 bit v.s. Registro di 32 bit
- 7. Installa i file a 32 bit e le impostazioni del registro a 64 bit nell'installer WiX
- 8. Servizio Windows a 32 bit che scrive sul registro a 64 bit. (Tasti AutoAdminLogon)
- 9. Lettura a 16 bit da un registro a 32 bit
- 10. Come ottimizzare le applicazioni .NET a 64 bit?
- 11. .net console app 32 vs 64 bit
- 12. Funzione hash da 64 bit a 10 bit
- 13. Perché le istruzioni x86-64 sui registri a 32 bit azzerano la parte superiore del registro a 64 bit completo?
- 14. .net Utilità InstallUtil - 32 bit vs 64 bit
- 15. Interoperabilità a 32 e 64 bit su Windows a 64 bit
- 16. Come eseguire un'applicazione .NET a 32 bit in un ambiente a 64 bit?
- 17. Come determinare l'utilizzo di ASP.NET da 32 bit a 64 bit?
- 18. Scrittura del valore di registro in un sistema a 64 bit
- 19. Come avviare un processo a 64 bit da un processo a 32 bit
- 20. Carica da un indirizzo a 64 bit in un altro registro di rax
- 21. App Java a 64 bit: è richiesto un sistema operativo a 64 bit, JRE a 64 bit e applicazione a 64 bit?
- 22. Differenze tra applicazioni .NET (4) a 32 e 64 bit.
- 23. Compilare ASP.NET a 64 BIT
- 24. Delphi XE2: eseguire il debug di una dll a 64 bit tramite un'app 64 bit
- 25. Posso creare una maschera di bit da 1 a 64 bit senza condizionale in Java?
- 26. Domanda Quicktime a 64 bit
- 27. Perché MSBuild a 64 bit carica estensioni a 32 bit?
- 28. Come compilare un programma C++ come 64-bit su un computer a 64 bit?
- 29. utilizzare 32bit COM Server da un programma a 64 bit di .NET
- 30. non è possibile eseguire una JVM a 64 bit a 64 bit di Windows 7 con una grande dimensione heap
Abbastanza corretto - grazie Jared! – marijne
Attenzione: MS dichiara che questo approccio (hardcoding del "Wow6432Node") non è supportato. Vedere http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard
-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