2016-07-17 4 views
4

Ich möchte einen spezifischen Wert (Typ REG_SZ) in der Registrierung für beide, x64 und x86 bearbeiten, aber die SetValue-Methode ändert nicht den Wert für x86. Das x64 funktioniert gut. Dies ist mein Code:Registry.SetValue funktioniert nicht für x86

RegistryKey regKeySpecific = RegistryKey.OpenBaseKey(
            RegistryHive.LocalMachine, RegistryView.Registry32); 

RegistryKey registryKey = regKeySpecific.OpenSubKey(
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag", true); 

registryKey.SetValue("ThisPCPolicy", "Show", RegistryValueKind.String); 

registryKey.Close(); 

Ich bin die RegistryView.Registry32 Parameter in der ersten Codezeile mit dem Wert in x86-Registrierung zu ändern, aber das funktioniert nicht.

Das Problem ist identifiziert, aber nicht gelöst. Dieser Code ändert sich immer den Schlüssel in der x64 (WOW6432Node) Registrierung:

"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FolderDescriptions\\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\\PropertyBag" 
+0

@HansPassant Schauen Sie sich meinen Code an. Ich verwende RegistryKey.OpenBaseKey oder ist das falsch? – Struct

+0

Okay, warum verwenden Sie Registry32, wenn Sie Registry64 meinten? Explorer ist ein 64-Bit-Programm. Der beste Weg, dies zu tun, ist, dass Ihr Programm auch im 64-Bit-Modus läuft. Klicken Sie mit der rechten Maustaste auf Ihr EXE-Projekt> Eigenschaften> Registerkarte Kompilieren> Platform target = AnyCPU and Prefer 32-bit unmarked. –

+0

Das stimmt. Aber ich möchte die ThisPC-Ordner aus dem Explorer entfernen. Wenn Sie eine x86-Anwendung wie Notepad ++ verwenden und ein Dokument öffnen, sind die Ordner bereits vorhanden. Deshalb muss ich die Schlüssel vom x64 und vom x86 Standort bearbeiten – Struct

Antwort

10

Sie offenbar ein Programm haben, in x86-Ausführung (32-Bit-Modus). Windows x64 führt die Umleitung Register für 32-Bit-Anwendungen, so dass der Versuch, den Zugriff auf

SOFTWARE\Microsoft

wird stattdessen Zugang

SOFTWARE\WOW6432Node\Microsoft

Die Registry32 Flagge macht diese gleiche Umleitung zur Verfügung .NET-Anwendungen laufen als x64. Dies hat keine Auswirkungen auf Sie, da das Betriebssystem diese Umleitung bereits aktiviert hat.

Um auf einem 64-Bit-Betriebssystem von einem 32-Bit-Prozess aus auf SOFTWARE\Microsoft zuzugreifen, sollten Sie das Flag Registry64 verwenden, das die Umleitung deaktiviert.

Merken (Ihre Frage hat diese rückwärts)

  • SOFTWARE\ die native Registry ist, 64-Bit auf 64-Bit-OS

  • SOFTWARE\WOW6432Node\ die Registrierung 32-Bit-Kompatibilität ist auf einem 64 -Bit OS

WOW64 ist nicht die Schicht, die 64-Bit-Unterstützung bietet. Es ist die Schicht, die 32-Bit-Anwendungsunterstützung bietet, wenn das Betriebssystem 64-Bit ist. Es bedeutet "(Unterstützung für) Windows (32) auf Windows64".