使用 C# 编辑注册表但无法使用 regedit 找到更改

Edited the registry with C# but cannot find the change with regedit


我使用以下代码通过 C# 更改了注册表:

RegistryKey regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey openSubKey = regKey.OpenSubKey(@"SOFTWARE\ASA\Suite", true);
openSubKey?.SetValue("Password", encryptedString, RegistryValueKind.String);
openSubKey?.SetValue("UserName", UserNameTextBox.Text, RegistryValueKind.String);
openSubKey?.SetValue("DomainName", DomainNameTextBox.Text, RegistryValueKind.String);
openSubKey?.Close();
regKey.Close();

这些条目已经存在,只是被替换了。当我使用相同类型的代码读取设置时,我得到了正确的设置,但是当我用 regedit.exe 打开注册表并手动搜索它时,我只找到旧值。在 regedit.exe 中是这条路径:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ASA\Suite 我已经查看了没有 WOW6432Node 的路径(甚至在 HKCU 中),但根本没有 ASA 条目。
有人知道那是什么吗?为什么我看不到我所做的更改?我在这里完全不解...

编辑:我将我的项目从 anyCPU 更改为 x86 并且没有任何变化,但是一旦我将其更改为 x64,读取的键就是 regedit.exe 显示的键。但是我打开注册表配置单元的 32 位变体,当我在这里写东西时问题仍然存在......为什么我看不到所做的更改? x64 Windows 下的 x86 应用程序应该自动写入 WOW6432Node,不是吗?

EDIT2:我在 x86 Windows 上测试了 x86 版本。我更改了注册表并可以读取它,但是使用 regedit 我看不到更改...这是什么鬼?

EDIT3:我在 HKCR\VirtualStore\MACHINE\SOFTWARE\ASA\Suite 下找到了更改的键我还不知道为什么,但我在这里搜索答案并 post 它。

可能是其他人正在覆盖它? 这可能有帮助吗? http://www.advancedinstaller.com/user-guide/registry-wow6432-node.html

Wow6432Node 注册表项表明您运行正在使用 64 位 Windows 版本。

操作系统使用此键为 32 位应用程序显示 HKEY_LOCAL_MACHINE\SOFTWARE 的单独视图,在 64 位 Windows 版本上显示 运行。当 32 位应用程序在 HKEY_LOCAL_MACHINE\SOFTWARE\\ 子项下写入或读取值时,应用程序从 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\\ 子项读取。

注册表反射器在 32 位和 64 位注册表视图(主要用于 COM 注册)之间复制某些值,并使用 "last-writer-wins" 方法解决任何冲突。

好的,我有答案了。我不想使用清单,所以我删除了它,因此没有被问到是否必须提升应用程序。因此,因为普通用户(即使登录用户具有管理员权限)无法写入 HKLM,所以它向 HKCU\VirtualStore 写入了一个密钥......这样我的应用程序也可以读取密钥但是在regedit.exe 这不是预期的地方。 为了解决这个问题,我实现了一个清单并更改了带有 requestedExecutionLevel 的行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

现在我什至不必构建 x64 和 x86 版本,而是可以使用 Any CPU 并让我的应用程序完成工作(即:查看是否使用 RegistryView.Registry32RegistryView.Registry64)