C# 注册表和注册表配置单元的区别是什么
当我运行以下命令时,rKey有两个值C# 注册表和注册表配置单元的区别是什么,c#,.net,registry,C#,.net,Registry,当我运行以下命令时,rKey有两个值 RegistryKey sqlServer = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server", false); 当我运行以下任一命令时(与同一用户在同一台机器上),我找不到任何值 RegistryKey sqlServer64 = RegistryKey.OpenBaseKey( RegistryHive.LocalMachine, Registr
RegistryKey sqlServer = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server", false);
当我运行以下任一命令时(与同一用户在同一台机器上),我找不到任何值
RegistryKey sqlServer64 = RegistryKey.OpenBaseKey( RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServer32 = RegistryKey.OpenBaseKey( RegistryHive.LocalMachine, RegistryView.Registry32 );
有人能告诉我蜂箱与普通注册表访问的答案或描述吗
编辑:
我后来做的是:
StringBuilder sbKeys = new StringBuilder();
foreach (var key in sqlServer.GetValueNames() )
{
sbKeys.AppendLine( key );
}
对于所有注册表项。对于sqlServer,我看到了两个值,对于sqlServer32和SqlServer64,没有值。第二个变量中的问题是无法打开子项。您的
sqlServer.GetValueNames()
调用在特定配置单元的根级别运行
你需要这样:
RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServer = root.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
foreach (var key in sqlServer.GetValueNames())
{ .... }
这样做与您的第一个变体(除了registry视图)没有什么不同。我希望使用适当的注册表视图可以解决您的问题
当然,您需要在上面的代码中添加一些错误检查。您需要显示如何使用
sqlServer64
和sqlServer
。@“SOFTWARE\Microsoft\Microsoft SQL Server”
第二种变体在哪里?接下来你必须使用OpenSubKey()。好吧,公平地说,我的第一条评论表明我和Hans都强烈怀疑同一个问题。谢谢David,我从Hans在我的帖子上的评论中得到了暗示,我已经觉得自己很愚蠢了(然后解决了这个问题)。虽然接受的人是汉斯!