2012-03-24 136 views
2

当我运行以下命令时,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); 

任何人都可以指向我的答案或描述的蜂巢vs普通的注册表访问?

编辑: 我做的事后为:

StringBuilder sbKeys = new StringBuilder(); 

    foreach (var key in sqlServer.GetValueNames()) 
    { 
     sbKeys.AppendLine(key); 
    } 

对于所有RegistryKeys。对于sqlserver,我看到两个值,对于sqlServer32和SqlServer64,没有值。

+4

你需要显示你用'sqlServer64'和'sqlServer'来做什么。 “@”SOFTWARE \ Microsoft \ Microsoft SQL Server“'进入第二个变体的位置在哪里? – 2012-03-24 19:11:40

+1

接下来你必须使用OpenSubKey()。 – 2012-03-24 19:34:43

+0

@大卫我更新了我的posrt – 2012-03-24 20:00:07

回答

1

第二个变体中的问题是您未能打开子密钥。您的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()) 
{ .... } 

完成这样它没有从你的第一个变体(除注册表视图)不同。我期望使用适当的注册表视图将导致您的other question解决方案。

当然,你会想在上面的代码中添加一些错误检查。

+0

感谢大卫,我从汉斯对我的帖子的评论中得到了一些暗示,并且已经陷入了愚蠢的境地(并在此之后解决了问题)。虽然接受将去汉斯! – 2012-03-24 20:10:50

相关问题