如何使用 C# 可靠地确定安装了 SQL Server 2008 的哪些组件?
Posted
技术标签:
【中文标题】如何使用 C# 可靠地确定安装了 SQL Server 2008 的哪些组件?【英文标题】:How to reliably determine which components of SQL Server 2008 are installed, using C#? 【发布时间】:2012-10-21 09:40:26 【问题描述】:我想使用 C# 以编程方式实现以下目标。
SQL Server 2008 中安装的查询组件 例如
-
升级工具
调试符号
复制支持
在线图书
开发工具
我曾尝试使用 SQL Server 的 SMO API 尝试查询信息集合以及配置集合,但找不到上述三点中的任何一个。
我需要能够以编程方式确定哪些 SQL Server 2008 组件已安装,哪些未安装,就像 SQL Server 安装设置首先检查安装了哪些组件一样。
一种方法是查询 SQL Server 安装日志文件,但如果 SQL Server 完全不存在或有人删除了该日志文件,则无济于事。
我需要可靠地确定已安装的 SQL Server 组件
请帮忙。
谢谢
史蒂夫
【问题讨论】:
【参考方案1】:您最好的选择可能是通过 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);
-
升级工具以升级顾问结束
调试符号是某些应用程序按需从符号服务器中提取的,并且不会显示在 Win32_Products 中。
似乎无法通过对 Win32_Products 的普通 WMI 查询检测到复制支持
Books Online 以 Books Online 结尾(英文)
开发工具以 BI Development Studio 结束
您可以通过运行 SQL Server 安装发现报告了解已安装的功能(需要管理员权限):
-
转到“开始”菜单
点击所有程序
单击 Microsoft SQL Server
点击配置工具
点击 SQL Server 安装中心
点击工具部分链接
单击已安装的 SQL Server 功能发现报告
您还可以通过运行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 版本而有所不同。
【讨论】:
感谢您的回复。我已经在使用这种 WMI 方法(也许我没有查询正确的 WMI 类,但我只能获得已安装的产品,这些产品没有显示第一部分中提到的足够详细信息。我将其标记为答案,因为我认为它可能不可能..谢谢 我对此进行了更多思考,并在 SQL Server 功能发现报告中添加了一些附加信息。 使用此命令从 PowerShell 查询 Win32_Product:Get-WmiObject -Class 'Win32_Product' -Filter "Name LIKE '%SQL%'"
。【参考方案2】:
避免使用 Win_32 产品,请参阅 here。
请改用CreateObject("WindowsInstaller.Installer")
。
【讨论】:
为什么要避免 Win32_Product?它很慢,但它会产生结果。如果您只需要运行一次,速度可能不是问题。以上是关于如何使用 C# 可靠地确定安装了 SQL Server 2008 的哪些组件?的主要内容,如果未能解决你的问题,请参考以下文章