Erstellen Sie 64-Bit-Registrierungsschlüssel (nicht-WOW64) von einer 32-Bit-Anwendung
-
25-09-2019 - |
Frage
Ich habe ein Visual Studio Installer, einige Registrierungsschlüssel schaffen:
HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
aber die Registrierungsschlüssel es sind, wird die Erstellung automatisch unter Wow6432Node mit:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
Wie ignoriere ich die Wow6432Node wenn Registrierung Erstellen Schlüssel in meinem C # -Code von der msi ausgeführt wird?
Lösung
Just FYI, unterstützt .NET 4.0 diese nativ. Beispiel:
RegistryBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
Sie können dann verwenden, dass RegistryBase Variable für den Zugriff etwas in der 64-Bit-Ansicht von HKLM. Im Gegensatz dazu, Registry32 wird die 32-Bit-Ansicht der Registrierung einen 64-Bit-Anwendung Zugriff lassen.
Andere Tipps
Hier finden Sie aktuelle http://www.pinvoke.net/default aspx / Advapi32 / regopenkeyex.html . Sie müssen die Registrierung Redirector verwenden und den richtigen Wert für die Zugriffsmaske passieren in. Leider werden Sie pinvoke benötigen.
Da es sehr wenig Dokumentation über OpenBaseKey
ist, werde ich auf shifuimam Antwort erweitern und eine Lösung für die OP bieten:
Private Sub Foo()
Dim myAppIs64Bit = Environment.Is64BitProcess
Dim baseKey As RegistryKey
If (myAppIs64Bit) Then
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
Else
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
End If
Dim myAppKey As RegistryKey = baseKey.OpenSubKey("SOFTWARE\MyApp")
End Sub
Wenn die App ist 32-bit, myAppKey
Punkte HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
. Wenn 64-Bit, verweist er auf HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
.
Der Vorteil OpenBaseKey
ist, dass es die Notwendigkeit, Referenz Wow6432
in Ihrem Code beseitigt.