gpt4 book ai didi

c# - 无法从 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 获取值名称()

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:27 33 4
gpt4 key购买 nike

我想从

中的注册表中读取所有值

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

我正在尝试使用以下代码执行此操作:

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
string[] values = key.GetValueNames();

但是我的值 String 总是空的。有趣的是,如果我将代码更改为

 RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion", false);
string[] values = key.GetValueNames();

我在 CurrentVersion 中获得了正确数量的 ValueNames。为什么它在\Run 中不起作用?如果我从 LocalMachine 更改为 CurrentUser,\Run 路径也有效。

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
string[] values = key.GetValueNames();

有人能告诉我为什么我的第一个代码示例不起作用吗?谢谢!

最佳答案

您没有提供有关您的 C# 应用程序是 32 位 (x86) 还是 64 位 (x64) 的详细信息。如果应用程序是在 64 位 Windows 上运行的 32 位应用程序,则对 HKLM\Software 的注册表调用将重定向到 HKLM\Software\Wow6432Node。微软称之为 Registry Redirector .只有某些键被重定向,详细信息在链接的文章中。

如果您的应用程序是 64 位的,则不会重定向这些注册表调用。

您可以通过将“TestWOW”这样的单个 REG_SZ 条目手动添加到 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 来测试它。您的 32 位代码应该读取此值(即使您实际上要求另一个注册表项!)。

如果可以,请将您的应用程序重新编译为 64 位。现在,相同的代码将从 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 返回预期值。

不幸的是,对于在 64 位操作系统上运行的 32 位应用程序,我不知道有一种机制可以强制 Windows 不将您的注册表调用重定向到 Wow64 节点。

关于c# - 无法从 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 获取值名称(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401116/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com