我正在创建一个应用程序,它是一个用户界面,可以访问两种类型的数据库 - SQLite和SQL Server。
问题是,SQLite不需要“安装”,因为它只是一个flatfile数据库,但另一方面,SQL Server(Express / normal)需要在使用前安装。我的问题很简单:
有没有办法可以通过C#程序找出本地计算机上是否安装了SQL Server实例?
答案 0 :(得分:17)
你有几种方法可以做到:
直接访问不是MS推荐的解决方案,因为它们可以更改密钥/路径。但其他解决方案并不健全,无法在64位平台上提供实例。
因此,我更喜欢在系统注册表中检查SQL Server实例。这样做,请记住 x86 和 x64 平台之间的注册表访问权限的差异。 Windows 64位将数据存储在系统注册表的不同部分,并将它们组合到视图中。所以使用 RegistryView 是必不可少的。
using Microsoft.Win32;
RegistryView registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
{
RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false);
if (instanceKey != null)
{
foreach (var instanceName in instanceKey.GetValueNames())
{
Console.WriteLine(Environment.MachineName + @"\" + instanceName);
}
}
}
如果您在64位操作系统上寻找32位实例(非常奇怪,但可能),您需要查看:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
答案 1 :(得分:10)
如果您的应用程序安装在相关计算机上,您可以使用类似于此的内容检查注册表:
using Microsoft.Win32;
RegistryKey RK = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\Microsoft SQL Server");
if(RK != null)
{
// It's there
}
else
{
// It's not there
}