注册表和注册表配置单元的区别是什么

本文关键字:注册表 区别 是什么 单元 配置 | 更新日期: 2023-09-27 18:28:50

当我运行以下命令时,rKey有两个值。

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())
{ .... }

这样做与您的第一个变体没有什么不同(除了注册表视图)。我希望使用适当的注册表视图可以解决您的另一个问题。

当然,您会希望在上面的代码中添加一些错误检查