我希望使用C#以编程方式实现以下目标。
查询SQL Server 2008中安装的组件 e.g
我尝试过使用SMO API for SQL Server试图查询信息收集以及配置集合,但找不到以上三点中的任何一个。
我需要能够以编程方式确定安装了哪些SQL Server 2008组件以及未安装哪些组件,就像首先检查安装了哪些组件的SQL Server安装设置一样。
一种方法是查询SQL Server安装日志文件,但如果SQL Server完全不存在或者某人删除了该日志文件,则无效。
我需要可靠地确定已安装的SQL Server组件
请帮忙。
由于
史蒂夫
答案 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);
}
}
}
}
您可以通过运行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的版本。
答案 1 :(得分:-1)
避免使用Win_32产品,请参阅here。
请改用CreateObject("WindowsInstaller.Installer")
。