首页 > 解决方案 > Registry.LocalMachine.OpenSubKey() 返回与注册表编辑器不同的结果

问题描述

我正在尝试为我的 CAD 插件创建安装程序,并且需要获取 AutoCAD 安装位置。但返回值与RegistryKey.GetSubKeyNames()我在注册表编辑器中看到的不同。

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())
    {
        Console.WriteLine(subkey_name);
    }
}

输出:

AddressBook
Autodesk Application Manager
Autodesk Content Service
Autodesk Material Library 2015
Autodesk Material Library Base Resolution Image Library 2015
Connection Manager
DirectDrawEx
DXM_Runtime
f528b707
Fontcore
...

在注册表编辑器中:

animizvideocn_is1
AutoCAD 2015
Autodesk 360
连接管理器
...

AutoCAD 2015是我需要的

标签: c#registry

解决方案


您的安装程序似乎是 32 位应用程序,或者至少作为 32 位进程运行。

因此,Windows 重定向

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

要访问非重定向节点,请按照此处的说明进行操作。


推荐阅读