注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 是否显示所有子项

Does the registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ show all subkeys

如果我打开此注册表并读出所有子项,则它与我的注册表编辑器显示的不同。

我打开注册表并读出所有子项的方式:

//Get all results of the specified registery
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
     foreach (string subkey_name in key.GetSubKeyNames())
     {
         using (RegistryKey subkey = key.OpenSubKey(subkey_name))
         {
             Console.WriteLine(subkey.Name);
         }
     }   
}

这为我提供了此注册表项中所有子项的输出。

作为示例,我将取出一个:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FDCFD759-BA24-F0C8-FE83-43513EE6D443}

当我检查注册表编辑器时。并搜索此示例,它不在给定位置,但在:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{FDCFD759-BA24-F0C8-FE83-43513EE6D443}

所以来到这个问题......

注册表编辑器是否显示所有子项?

如果对我的问题或评论有任何疑问,我很乐意听到!

它被称为 "Windows on Windows",这是设计使然。

就像Program FilesProgram Files (x86)一样,WOW6432Node键是特殊的。当 32 位进程尝试从 HKEY_LOCAL_MACHINE\SOFTWARE\ 中读取时,它们会被定向到 HKEY_LOCAL_MACHINE\SOFTWARE\WoW6432Node,这样它们就不会尝试意外地执行仅适用于 64 位进程的操作。

默认情况下,64 位 Windows 计算机上的 Regedit 会向您显示注册表的 64-bit view

32 位应用程序 运行 在 64 位 Windows 上默认看到 32 位视图。这些项位于 64 位注册表的 SOFTWARE\WOW6432Node 下。

卸载信息存储在 64 位计算机注册表中的 4 个位置:在 64 位和 32 位视图中的 HKEY_CURRENT_USERHKEY_LOCAL_MACHINE 根目录下。

应用程序可以通过在打开密钥时使用 KEY_WOW64_64KEYKEY_WOW64_32KEY 标志来决定他们想要访问哪个视图。