【问题标题】:Unable to write to HKEY_CURRENT_USER无法写入 HKEY_CURRENT_USER
【发布时间】:2012-10-05 16:16:45
【问题描述】:

我有一个 C# 程序 (VS2010),它将值写入我们创建的几个 HKEY_CURRENT_USER 注册表项。通常这在Win XP, Vista, and 7, x86 and x64 上工作正常。但是在某些机器上,密钥只是没有被写入。没有抛出异常,之后键和值就不存在了。

我们正在竭尽全力想弄清楚为什么会发生这种情况。这真的是零星的......在一台机器上它不起作用 - 但在同一个办公室或域中的所有其他机器上都可以工作。

我们应该寻找什么?

【问题讨论】:

  • 你在 HKCU 的什么地方创建它们?
  • 一个在 HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins 下,另一个在 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplication 下。据我们所知,两者都不是由 C# 程序编写的。我们可以使用 RegEdit 复制内容。
  • 你可以检查那些你的密钥没有被写入其中一些机器上的 KEY_CURRENT_USER\Software\Wow6432Node\... (而不是 HKEY_CURRENT_USER\ Software\Microsoft\... 位置)。
  • 不确定这一切发生在什么情况下,但大多数都是 32 位的。
  • 出现故障的机器的操作系统/架构是什么?

标签: c# windows registry


【解决方案1】:

您所描述的内容听起来很像微软的Registry Virtualization

但是,据我了解,这仅适用于 32 位应用程序的 HKEY_LOCAL_MACHINE\Software。

注册表虚拟化是在 Windows Vista 中引入的,作为一种提供向后兼容的方式,这些应用程序不是使用 Vista 的 UAC 编写的。这个想法是,它将通常会影响注册表敏感区域(如 HKLM)的注册表操作重定向到特殊位置,唯一的影响将是当前用户。它应该也可以向后工作 - 当访问注册表的这些部分之一时,它会在失败之前检查重定向的位置,然后查找不存在的密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2012-04-23
    • 2017-09-06
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多