【问题标题】:Getting back "ResolveIOD" while trying to open HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\ on Windows 7?尝试在 Windows 7 上打开 HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\ 时返回“ResolveIOD”?
【发布时间】: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 键存在,它表明不仅仅是一个键存在 - UserDataFoldersSecure 等都在那里并且没有返回由GetSubKeyNames() 两者之一。

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

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

【问题讨论】:

  • 您可能需要在兼容模式下运行它。 HKLM 在 Win7 中是特定于管理员的。不妨试试 HKCU。

标签: c# windows permissions registry


【解决方案1】:

首先,为确保您访问的是 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多