C-Sharp RegistryKey.OpenBaseKey() Redirection
Hallo @ Community,
ich versuche gerade ein Verständnis-Problem im Zusammenhang mit dem Auslesen von RegistryKeys unter HKCU zu lösen und hoffe auf eure Hilfe.
Das Problem:
Mit folgendem Code kann man explizit den auszulesenden Hive und die View der Registry festlegen:
Das funktionert einwandfrei bei z.B. HKLM, interessanterweise aber nicht bei HKCU (??). Ein Beispiel:
Unter "HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components" gibt es einen fiktiven RegistryKey "__FAKE_FAKE_FAKE", nicht aber unter "HKEY_CURRENT_USER\WOW6432Node\Software\Microsoft\Active Setup\Installed Components"
Wendet man den obigen Code auf den CurrentUser-Hive an, so wird in beiden Ausgaben der FakeKey angezeigt. Offensichtlich springt hier die Redirection ein. Durch die explizite Angabe der RegistryView, sollte die Redirection aber deaktiviert sein (zumindest beschreibt MS das so)
siehe:
Meine Fragen dazu:
Vielen Dank für eure Unterstützung!
Beste Grüße Mayho
ich versuche gerade ein Verständnis-Problem im Zusammenhang mit dem Auslesen von RegistryKeys unter HKCU zu lösen und hoffe auf eure Hilfe.
Das Problem:
Mit folgendem Code kann man explizit den auszulesenden Hive und die View der Registry festlegen:
static void Main(string args)
{
Console.WriteLine("======= 64 ===========" + Environment.NewLine);
using (RegistryKey CurrentKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"Software\Microsoft\Active Setup\Installed Components"))
{
if (CurrentKey != null)
{
int i = 1;
foreach (var subKey in CurrentKey.GetSubKeyNames())
{
Console.WriteLine(string.Format("{0}: {1})", i,CurrentKey.Name + "\\" + subKey));
i++;
}
}
}
Console.WriteLine("======= 32 ===========" + Environment.NewLine);
using (RegistryKey CurrentKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(@"Software\Microsoft\Active Setup\Installed Components"))
{
if (CurrentKey != null)
{
int i = 1;
foreach (var subKey in CurrentKey.GetSubKeyNames())
{
Console.WriteLine(string.Format("{0}: {1})", i, CurrentKey.Name + "\\" + subKey));
i++;
}
}
}
}
Das funktionert einwandfrei bei z.B. HKLM, interessanterweise aber nicht bei HKCU (??). Ein Beispiel:
Unter "HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components" gibt es einen fiktiven RegistryKey "__FAKE_FAKE_FAKE", nicht aber unter "HKEY_CURRENT_USER\WOW6432Node\Software\Microsoft\Active Setup\Installed Components"
Wendet man den obigen Code auf den CurrentUser-Hive an, so wird in beiden Ausgaben der FakeKey angezeigt. Offensichtlich springt hier die Redirection ein. Durch die explizite Angabe der RegistryView, sollte die Redirection aber deaktiviert sein (zumindest beschreibt MS das so)
siehe:
Meine Fragen dazu:
- Warum redirected MS unter HKCU obwohl dies explizit mittels Code deaktiviert ist?
- Wie kann ich erzwingen, dass tatsächlich keine Redirection unter HKCU durchgeführt wird?
Vielen Dank für eure Unterstützung!
Beste Grüße Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 375650
Url: https://administrator.de/forum/c-sharp-registrykey-openbasekey-redirection-375650.html
Ausgedruckt am: 02.04.2025 um 04:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Mayho,
Hive und View habe ich noch nicht benutzt.
Deinen Code kann ich auch nicht 1:1 compilieren.
(Der Compiler jammert an ein paar Stellen.)
Dein Problem habe ich entweder nicht verstanden oder kann es nicht nachvollziehen.
Mir wird ausschließlich der Zweiginhalt angezeigt, den ich ausgewählt habe, wenn ich "meinen" Code ausführe.
Zuerst kommt nur der Inhalt von
"Software\Microsoft\Active Setup\Installed Components"
und danch nur der Inhalt von
"Software\Wow6432Node\Microsoft\Active Setup\Installed Components".
Gruß Frank
Hive und View habe ich noch nicht benutzt.
Deinen Code kann ich auch nicht 1:1 compilieren.
(Der Compiler jammert an ein paar Stellen.)
Dein Problem habe ich entweder nicht verstanden oder kann es nicht nachvollziehen.
Mir wird ausschließlich der Zweiginhalt angezeigt, den ich ausgewählt habe, wenn ich "meinen" Code ausführe.
Zuerst kommt nur der Inhalt von
"Software\Microsoft\Active Setup\Installed Components"
und danch nur der Inhalt von
"Software\Wow6432Node\Microsoft\Active Setup\Installed Components".
using System;
using Microsoft.Win32;
namespace RegAusgabe
{
class Program
{
static void Main(string args)
{
Console.WriteLine("======= 64 ===========" + Environment.NewLine);
RegistryKey CurrentKey1 = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Active Setup\\Installed Components", false);
if (CurrentKey1 != null)
{
int i = 1;
foreach (var subKey in CurrentKey1.GetSubKeyNames())
{
Console.WriteLine(string.Format("{0}: {1})", i,CurrentKey1.Name + "\\" + subKey));
i++;
};
};
Console.WriteLine("");
Console.WriteLine("======= 32 ===========" + Environment.NewLine);
RegistryKey CurrentKey2 = Registry.CurrentUser.OpenSubKey("Software\\Wow6432Node\\Microsoft\\Active Setup\\Installed Components", false);
if (CurrentKey2 != null)
{
int i = 1;
foreach (var subKey in CurrentKey2.GetSubKeyNames())
{
Console.WriteLine(string.Format("{0}: {1})", i,CurrentKey2.Name + "\\" + subKey));
i++;
};
};
}
}
}
Gruß Frank

Ganz einfach, für den Software-Key in HKCU findet im Gegensatz zu HKLM kein Redirection statt, diese sind Shared und die einzelnen Keys müssen einzeln angesprochen werden (Wie Pedant es macht). Siehe:
Registry Keys Affected by WOW64
Registry Keys Affected by WOW64
HKEY_CURRENT_USER Shared Shared
SOFTWARE Shared Shared
Hallo Mayho,
Im Projekt war eingestellt als
Zielframework: .NET Framework 3.5
Die Umgebung ist:
Microsoft Visual Studio Community 2015 - Version 14.0.24720.00 Update 1
Microsoft .Net Framework - Version 4.7.030.56
Gruß Frank
Im Projekt war eingestellt als
Zielframework: .NET Framework 3.5
Die Umgebung ist:
Microsoft Visual Studio Community 2015 - Version 14.0.24720.00 Update 1
Microsoft .Net Framework - Version 4.7.030.56
Gruß Frank

Zitat von @mayho33:
@136166
Ist es nicht umgekehrt? Im HKCU findet eine Redirection statt und im HKLM nicht.
Nein, les den Link da steht's unmissverständlich!@136166
Ganz einfach, für den Software-Key in HKCU findet im Gegensatz zu HKLM kein Redirection statt,
Ist es nicht umgekehrt? Im HKCU findet eine Redirection statt und im HKLM nicht.