我安装了SQL Server.
在注册表中,*HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft*中的密钥MSSQLServer如下所示:

以下所有代码行都从注册表返回值:
var mainKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer");
var subKey1 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("Client");
var subKey2 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("MSSQLServer").OpenSubKey("CurrentVersion");
Run Code Online (Sandbox Code Playgroud)
但是,这个没有:
var subKey3 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("Setup");
Run Code Online (Sandbox Code Playgroud)
"Setup"看起来与其他键的值相同.有什么想法为什么这个命令返回null?
Mik*_*ray 10
您的应用程序是32位,这是一个64位注册表项.32位和64位应用程序具有不同的注册表视图.在注册表中,您在代码中获得的密钥位于HKLM\Software\Wow6432Node\MSSQLServer,而不是HKLM\Software\MSSQLServer(在您的图片中).
遗憾的是,用于访问注册表项的托管API不允许32位应用程序获取注册表的64位视图.
有两个选项:将应用程序更改为目标AnyCPU或x64或P/Invoke非托管API.这有一个如何进行P/Invoke和MSDN文档的示例.
顺便说一句,您可以将路径传递给OpenSubKey方法,而不是像这样将它们链接在一起.
更新:我上面的说法不太正确.从.NET 4开始,该OpenBaseKey方法(MSDN)可用于在32位应用程序中获取64位视图.
| 归档时间: |
|
| 查看次数: |
5541 次 |
| 最近记录: |