如何使用C#可靠地确定安装SQL Server 2008的哪些组件?

时间:2012-10-31 19:39:01

标签: c# sql-server installation components smo

我希望使用C#以编程方式实现以下目标。

查询SQL Server 2008中安装的组件 e.g

  1. 升级工具
  2. 调试符号
  3. 复制支持
  4. 联机丛书
  5. 开发工具
  6. 我尝试过使用SMO API for SQL Server试图查询信息收集以及配置集合,但找不到以上三点中的任何一个。

    我需要能够以编程方式确定安装了哪些SQL Server 2008组件以及未安装哪些组件,就像首先检查安装了哪些组件的SQL Server安装设置一样。

    一种方法是查询SQL Server安装日志文件,但如果SQL Server完全不存在或者某人删除了该日志文件,则无效。

    我需要可靠地确定已安装的SQL Server组件

    请帮忙。

    由于

    史蒂夫

2 个答案:

答案 0 :(得分:6)

您最好的选择可能是通过WMI查询Win32_Product。您可以使用WMI Code Creator v1.0来帮助您创建适当的查询。您还可以查看WQL (SQL for WMI)以获取有关支持的查询语法和ManagementObjectSearcher Class的信息。

这样的事情可以解决问题:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_Product WHERE Name LIKE '%SQL%'"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_Product instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("InstallDate: {0}", queryObj["InstallDate"]);
                    Console.WriteLine("InstallLocation: {0}", queryObj["InstallLocation"]);
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                    Console.WriteLine("SKUNumber: {0}", queryObj["SKUNumber"]);
                    Console.WriteLine("Vendor: {0}", queryObj["Vendor"]);
                    Console.WriteLine("Version: {0}", queryObj["Version"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}
  1. 升级工具以升级顾问结束
  2. 调试符号由某些应用程序根据需要从符号服务器中提取,并且不会显示在Win32_Products中。
  3. 通过对Win32_Products的纯WMI查询似乎无法检测到复制支持
  4. 联机丛书以联机丛书(英文)
  5. 结束
  6. 开发工具以BI Development Studio结束
  7. 您可以通过运行SQL Server安装程序发现报告(需要管理员权限)来了解已安装的功能:

    1. 转到“开始”菜单
    2. 点击所有程序
    3. 单击Microsoft SQL Server
    4. 点击配置工具
    5. 单击“SQL Server安装中心”
    6. 点击工具部分链接
    7. 单击“已安装的SQL Server功能发现报告”
    8. 您还可以通过运行setup.exe /ACTION=RUNDISCOVERY /Q(在SQL Server 2008 R2的情况下来自C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\SQLServer2008R2)从命令行创建报告。报告文件通常位于C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\YYYYMMDD_HHmmSS,其中YYYYMMDD_HHmmSS是报告运行的日期和时间。 SqlDiscoveryReport.xml可能是以编程方式使用最有用的一个。请注意,这些位置可能会有所不同,具体取决于用户在初始设置期间选择的安装位置以及SQL Server的版本。

答案 1 :(得分:-1)

避免使用Win_32产品,请参阅here

请改用CreateObject("WindowsInstaller.Installer")