C# 无法从HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run获取ValueNames()
我想从注册表中读取C# 无法从HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run获取ValueNames(),c#,registry,registrykey,C#,Registry,Registrykey,我想从注册表中读取 HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 我正在尝试使用以下代码执行此操作: RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false); string[] values = key.GetValueNames(
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
我正在尝试使用以下代码执行此操作:
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
string[] values = key.GetValueNames();
但是我的值字符串总是空的。
有趣的是,如果我将代码更改为
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion", false);
string[] values = key.GetValueNames();
我在CurrentVersion中获得了正确数量的ValueName。为什么它在\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
。微软称之为。只有某些键被重定向,详细信息在链接文章中
如果应用程序是64位的,则不会重定向这些注册表调用
您可以通过手动向HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
添加单个注册表项(例如“TestWOW”)来测试这一点。您的32位代码应该读取此值(即使您实际上要求另一个注册表项!)
如果可以,请将应用程序重新编译为64位。现在,相同的代码将从HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
返回预期值
不幸的是,对于运行在64位操作系统上的32位应用程序,我不知道有什么机制可以强制Windows不将注册表调用重新定向到Wow64节点。无法重现这种情况。你的第一个例子很适合我。你在一个独立的测试程序中测试过吗?也许在你的真实代码中有一些奇怪的情况…就是这么做的。同样的问题再次出现。但是谢谢你的回答。