繁体   English   中英

检测SQL Server 2008 R2

[英]Detect SQL Server 2008 R2

我已经搜寻了一天,但问题仍然是:如何在各种Windows版本上检测SQL Server 2008 R2:

  • 通过注册表 (将是我们最喜欢的解决方案),
  • 通过文件系统
  • 通过安装程序退出代码

使用NSIS开发的安装程序。 一些其他信息:

登记处

网上的样本已过期或完全不正确。 不仅R2,而且2k8检测也有问题。

文件系统

我不知道什么文件特别来自2k8 R2。

安装程序退出代码

在某些情况下,退出时没有错误代码(即缺少先决条件)。

尝试执行以下查询:

SELECT @@Version

我得到这个结果:

Microsoft SQL Server 2008 R2(RTM)-10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 5.2(Build 3790:Service Pack 2)上的Microsoft Corporation Enterprise Edition(64位)

这够了吗? 对我来说是:)

您可以使用WMI列出所有已安装的Microsoft产品,然后查找您需要的产品

public static class MyClass
    {
        public static void Main()
        {
            ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
            foreach (ManagementObject mo in mos.Get())
            {
                Console.WriteLine(mo["Name"]);
            }


        }
    }

查看具有多种方法的旧版SQLPing源代码

在尝试执行Davide提供的查询(SELECT @@ Version)之前,您可以检查MSSQL服务是否正在运行

using System.ServiceProcess;
var list = ServiceController.GetServices().ToList();
        if (list.Any(sc => sc.ServiceName.ToLower().Contains("mssql")))

我在应用程序中使用以下代码

 SqlDataSourceEnumerator sqldatasourceenumerator1 = SqlDataSourceEnumerator.Instance;
            DataTable datatable1 = sqldatasourceenumerator1.GetDataSources();
            foreach (DataRow row in datatable1.Rows)
            {
                if (Environment.MachineName.Equals(row["ServerName"]))
                {

                    isSqlServerPresent = true;
                    break;
                }
            }

唯一的问题是,该代码在计算机处于网络中时有效,但是由于我的情况是计算机将在网络中,所以我对这个问题很满意。

它为我提供了SQL Server的本地实例。

实际上,如果要列出计算机或LAN上的网络中的服务器和SQL Server实例的列表,则有相应的API。

应该有正确的方法来调用NetServerEnum Windows API,有关示例,请参见:

http://www.xtremevbtalk.com/showthread.php?t=107256

http://pinvoke.net/default.aspx/netapi32/netserverenum.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM