C# 注册表写入不工作

C# 注册表写入不工作,c#,registry,C#,Registry,这是我的注册表编写代码 key.SetValue(KeyName, KeyValue_number, RegistryValueKind.DWord); 调试时,值如下所示: key = {HKEY_LOCAL_MACHINE\SOFTWARE\Test} KeyName = "quack" KeyValue_number = 1 所以看起来应该可以插入,但我在注册表中根本找不到键:/,而不是作为目录或键 重新启动了regedit,一切都没有,令人困惑的是,在64位系统上,windows会自

这是我的注册表编写代码

key.SetValue(KeyName, KeyValue_number, RegistryValueKind.DWord);
调试时,值如下所示:

key = {HKEY_LOCAL_MACHINE\SOFTWARE\Test}
KeyName = "quack"
KeyValue_number = 1
所以看起来应该可以插入,但我在注册表中根本找不到键:/,而不是作为目录或键
重新启动了regedit,一切都没有,令人困惑的是,在64位系统上,windows会自动将许多键重定向到注册表中的不同文件夹。 在我的例子中,它是“HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Test”


编辑:多亏了下面的Hans Passant,解决这个问题的方法显然是简单地将编译平台设置为“任意CPU”,这个问题就解决了。

事实证明,在64位系统上,windows会自动将许多键重定向到注册表中的不同文件夹。 在我的例子中,它是“HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Test”



编辑:多亏了下面的Hans Passant,显然解决这个问题的方法是简单地将编译平台设置为“任意CPU”,这个问题就解决了

用于执行程序的帐户是否有权限写入注册表?从您编写的内容来看,我理解代码似乎执行得很好,但你就是看不到注册表中的更改?没有例外?好吧,我已经找了一个小时了,在我发布这篇文章之后,我马上就想出来了。由于我使用的是64位系统,因此决定将密钥自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Test会比较困难。您应该将此作为答案发布并接受它,以便其他有问题的人可以轻松地看到解决方案:)用于执行程序的帐户是否有权限写入注册表?从你写的我理解代码似乎执行得很好,但你就是看不到注册表中的变化?没有例外?好吧,我已经找了一个小时了,在我发布这篇文章之后,我马上就想出来了。因为我使用的是64位系统,所以这会很困难,并自动将我的密钥重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Test。您应该将此作为答案发布并接受它,以便其他有问题的人可以轻松地看到解决方案:)建议您用于编写注册表项的代码位为32位。只要使用它的所有其他代码也是32位的,那么这就不是问题。如果64位代码需要访问同一个密钥,那么您需要一个64位detect sizeof(int)==8来处理这种情况,然后强制它转到WOW6432节点。我应该在任何使用该应用程序的计算机上通过正常的“HKEY_LOCAL_MACHINE\SOFTWARE\Test”完成所有操作,但仍然不知道如何执行:/Project+Properties,“构建”选项卡,将“平台目标”更改为AnyCPU。您将。。开玩笑。。我一直在寻找如何解决这个问题,就这么简单。。。这很痛苦:P但谢谢^^它现在似乎可以工作了该死的,我假设至少有一个应用程序被强制为32位(例如,传统的win32应用程序)。也就是说,只要您记得使用它,wee registry helper静态类就会对其进行排序(建议用于写入注册表项的代码位为32位。只要使用它的所有其他代码也是32位,则这不是问题。如果64位代码需要访问同一密钥,则需要64位检测大小(int)==8将适用于此情况,然后强制它转到WOW6432节点。我应该在使用该应用程序的任何计算机上通过正常的“HKEY_LOCAL_MACHINE\SOFTWARE\Test”完成所有操作,但仍然不知道如何执行:/Project+Properties,Build选项卡,更改“平台目标”对任何CPU来说。你在开玩笑。我一直在寻找如何解决这个问题,而且很简单…这很痛苦:P但感谢^^它现在似乎可以工作。该死,我假设至少有一个应用程序被强制为32位(例如旧的win32应用程序)。这么说,只要你记得使用它,一个wee registry helper静态类就会对其进行排序(