【发布时间】:2011-06-08 21:10:09
【问题描述】:
我正在尝试获取 C# 3.5 应用程序上的 UserData 注册表子项,以便查找外部程序的安装位置以启动它。
做这样的事情:
RegistryKey installerKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Installer");
然后
RegistryKey userDataKey = installerKey.OpenSubKey("UserData");
返回空值;如果我返回并调用installerKey.GetSubKeyNames() 来确定@987654324@ 下存在哪些子项名称,它只会返回一个子项名称:ResolveIOD。我一直无法找到只能找到此键的含义。
regedit 没有显示 ResolveIOD 键存在,它表明不仅仅是一个键存在 - UserData、Folders、Secure 等都在那里并且没有返回由GetSubKeyNames() 两者之一。
这是我第一次访问注册表配置单元的安装程序部分中的任何内容,所以我可能做错了什么。是否需要某种特殊权限才能从客户端应用程序读取这些(可能是敏感的、安全方面的)密钥,或者这在 Windows 7 上通常是不可接受的,我应该找到另一种方法弄清楚程序的位置?
因为我在其他注册表问题中看到了这一点:这是在 64 位 Windows 上作为 32 位应用程序运行的。
【问题讨论】:
-
您可能需要在兼容模式下运行它。 HKLM 在 Win7 中是特定于管理员的。不妨试试 HKCU。
标签: c# windows permissions registry