检查是否安装了 SQL Server C#

本文关键字:Server SQL 是否 安装 检查 | 更新日期: 2023-09-27 18:34:22

我正在用C#完成一个包含SQL Server数据库的应用程序。

如何检查用户是否安装了 SQL Server 2012 Express Local DB?

是否可以在x86,x64上通过注册表进行检查?

基本上这个想法是,如果用户没有安装SQL Server,应用程序建议安装它。

作为安装程序,

我正在为安装程序工作,没有SQL Server 2012 Express Local DB的依赖项。

谢谢。

检查是否安装了 SQL Server C#

您必须循环浏览卸载 GUID 并找到以关键字"Microsoft SQL Server 2012"开头的 GUID。 您可以通过转到控制面板>程序和功能>并查看"显示名称"列来找到它。

/

/HKEY_LOCAL_MACHINE''SOFTWARE''Wow6432Node''Microsoft''Windows''CurrentVersion''Uninstall{guidVariable}''DisplayName

.. 应匹配"Microsoft SQL Server 2012*"通配符。

我没有确切的代码,但这应该可以让您入门。 只需遍历"卸载"键的所有子项,然后通过获取值找到"显示名称"键。 下面的"GUID"变量应该是您的迭代器,因为您不知道该值。 我相信您可以获得作为"卸载"键子键的所有 GUID 值的列表。

string UninstallRegKeyPath = @"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall";
Guid UninstallGuid = new Guid(GUID);
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(UninstallRegKeyPath, true))
{
    if (key == null)
    {
        return;
    }
    try
    {
        string guidText = UninstallGuid.ToString("B");
        RegistryKey child = key.OpenSubKey(guidText);
        if (child != null)
        {
        string displayName = child.GetValue("DisplayName").ToString();
        if (displayName.Contains("Microsoft SQL Server 2012"))
        {
            // implement logic when MSSQL 2012 is found
        }       
        child.Close();
        }
    }
}

只是要小心。 有 32 位安装和 64 位安装。 Wow6432Node包含我相信的32位程序,因此默认情况下安装在C:'Program Files (x86)'中的所有内容(但可能在任何地方(。 还有另一个位置,我会让你找到,用于所有 64 位程序,默认情况下安装在 C:'Program Files' 中(再次可以安装在任何地方(。

编辑:

试试这个。 您可能还希望将"LocalMachine"替换为"CurrentUser",因为许多安装程序允许您为用户或所有用户配置它们。

        using (RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall"))
        {
            string searchKey = @"Microsoft SQL Server 2012";
            string subKeyName = "DisplayName";
            foreach (string keyname in root.GetSubKeyNames())
            {
                //Console.WriteLine(keyname);
                using (RegistryKey key = root.OpenSubKey(keyname))
                {
                    try  // in case "DisplayName doesn't exist
                    {
                        string displayName = key.GetValue(subKeyName).ToString();
                        if (displayName.StartsWith(searchKey))
                            Console.WriteLine("GUID: " + keyname + Environment.NewLine + displayName + Environment.NewLine);
                    }
                    catch
                    {
                    }
                }
            }
        }
        Console.ReadLine();