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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top