尝试在Windows 7上打开HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Installer \时返回“ResolveIOD”?

时间:2011-01-14 00:23:53

标签: c# windows permissions registry

我正在尝试使用C#3.5应用程序上的UserData注册表子项,这样我就可以查找外部程序的安装位置来启动它。

做这样的事情:

RegistryKey installerKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Installer");

然后

RegistryKey userDataKey = installerKey.OpenSubKey("UserData");

返回null;如果我返回并调用installerKey.GetSubKeyNames()来确定Installer下的哪些子项名称,它只返回一个子项名称:ResolveIOD。我无法找到只能找到此键的内容。

regedit没有显示ResolveIOD密钥,它显示的不仅仅是存在一个密钥 - UserDataFolders,{{1 }等等都在那里,Secure也没有返回。

这是我第一次访问注册表配置单元的Installer部分中的任何内容,所以我可能做错了什么。我是否需要某种特殊权限才能从客户端应用程序中读取这些(可能是敏感的,安全性的)密钥,或者这在Windows 7上通常是不可接受的,我应该找到另一种方法弄清楚程序的位置?

因为我在其他注册表问题上看到了这一点:它在64位Windows上作为32位应用程序运行。

1 个答案:

答案 0 :(得分:0)

首先,为了确保您访问的是64位注册表而不是Wow6432Node沙箱,请使用包含KEY_WOW64_64KEY(http://msdn.microsoft.com/en-us/library/ms724878%28v=vs.85%29.aspx)的RegOpenKeyEx函数作为访问选项之一。

pinvoke.net有一个C#示例:http://www.pinvoke.net/default.aspx/advapi32/RegOpenKeyEx.html

另请注意,启用UAC后,未升级的应用最多只能拥有对HKLM的读取权限。