簡體   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