Check if SQL Server is installed on a machine through C#

后端 未结 2 1542
太阳男子
太阳男子 2020-12-16 02:31

I am making an application which is a user interface to access 2 types of databases - SQLite and SQL Server.

The thing is, SQLite doesnt need to be \"installed\

相关标签:
2条回答
  • 2020-12-16 02:58

    If your app is installed on the machine in question, you could inspect the registry using something similar to this:

    using Microsoft.Win32; 
    RegistryKey RK = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\Microsoft SQL Server");
        if(RK != null)
        {
           // It's there 
        }
        else
        {
           // It's not there 
        }
    
    0 讨论(0)
  • 2020-12-16 03:09

    You've got several ways to do it:

    • SmoApplication.EnumAvailableSqlServers()
    • SqlDataSourceEnumerator.Instance
    • Direct access to system registry

    Direct access isn't the recommended solution by MS, because they can change keys/paths. But the other solutions are not robust and fails providing instances on 64-bit platforms.

    Therefore I prefer to check SQL Server instances in System Registry. Doing that, keep in mind the difference in Registry access between x86 and x64 platforms. Windows 64-bit stores data in different parts of system registry and combines them into views. So using RegistryView is essential.

    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);
            }
        }
    }
    

    If you are looking for 32-bit instances on a 64-bit OS (pretty weird, but possible), you will need to look:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
    
    0 讨论(0)
提交回复
热议问题