Wie man einen WOW64-Registrierungsschlüssel öffnet von einer 64-Bit .NET-Anwendung

StackOverflow https://stackoverflow.com/questions/1074411

  •  21-08-2019
  •  | 
  •  

Frage

Meine .NET-Anwendung (any-CPU) benötigt einen Registrierungswert von einem 32-Bit-Programm erstellt zu lesen. Auf 64-Bit-Windows geht dies unter dem Wow6432Node Schlüssel in der Registrierung. Ich habe gelesen, dass Sie auf die Wow6432Node nicht hart Code sollte, so was ist der richtige Weg, es mit .NET zugreifen?

War es hilfreich?

Lösung

In dem Fall, dass Sie explizit einen Wert von einem Programm 32 Bit geschrieben lesen, müssen in einem 64-Bit-Programm, ist es OK, um hart Code es. Ganz einfach, weil es wirklich keine andere Möglichkeit.

Ich würde natürlich abstrakt es zu einer Hilfsfunktion aus. Zum Beispiel

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

Andere Tipps

Wenn Sie das Ziel .Net Version v4 ändern können, dann können Sie die neue OpenBaseKey Funktion z.B.

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);
}

Der richtige Weg wäre das native Registry api rufen und das Bestehen der KEY_WOW64_32KEY Flagge zu RegOpenKeyEx / RegCreateKeyEx

Antwort Anders 'erweitert, gibt es ein gutes Beispiel für das Einwickeln des resultierenden Griff in einem .NET RegistryKey Objekt auf Shahar Prish Blog -. sicher sein, die Kommentare zu lesen, obwohl

Beachten Sie, dass ungeschminkte Verwendung von der pinvoke.net Wrapper von RegOpenKeyEx ist voller Fragen.

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