4

C# を使用してプログラムで次のことを実現したいと考えています。

たとえば、SQL Server 2008 にインストールされているクエリ コンポーネント

  1. アップグレード ツール
  2. デバッグ シンボル
  3. レプリケーションのサポート
  4. オンライン ブック
  5. 開発ツール

SMO API for SQL Server を使用して、情報収集と構成収集を照会しようとしましたが、上記の 3 点のいずれも見つかりませんでした。

どのコンポーネントがインストールされているかを最初に確認する SQL Server インストール セットアップと同様に、どの SQL Server 2008 コンポーネントがインストールされていて、どのコンポーネントがインストールされていないかをプログラムで判断できる必要があります。

1 つの方法は、SQL Server インストール ログ ファイルを照会することですが、SQL Server がまったく存在しない場合や、誰かがそのログ ファイルを削除した場合は役に立ちません。

インストールされている SQL Server コンポーネントを確実に特定する必要がある

助けてください。

ありがとう

スティーブ

4

2 に答える 2

6

最善の策は、おそらくWMIを介してWin32_Productにクエリを実行することです。WMI Code Creator v1.0を使用すると、適切なクエリを作成できます。サポートされているクエリ構文とManagementObjectSearcherクラスについては、 WQL(SQL for WMI)も参照してください。

このような何かがトリックを行う必要があります:

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. BooksOnlineはBooksOnlineで終わります(英語)
  5. 開発ツールはBIDevelopmentStudioで終わります

インストールされている機能については、SQL Serverセットアップ検出レポートを実行することで確認できます(管理者権限が必要です)。

  1. スタートメニューに移動します
  2. すべてのプログラムをクリック
  3. MicrosoftSQLServerをクリックします
  4. [構成ツール]をクリックします
  5. [SQLServerインストールセンター]をクリックします
  6. [ツール]セクションのリンクをクリックします
  7. [インストールされたSQLServer機能検出レポート]をクリックします

( SQL Server 2008 R2の場合setup.exe /ACTION=RUNDISCOVERY /Qから)を実行して、コマンドラインからレポートを作成することもできます。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は、おそらくプログラムで使用するのに最も役立つものです。これらの場所は、初期セットアップ時にユーザーが選択したインストール場所とSQLServerのバージョンによって多少異なる場合があることに注意してください。

于 2012-10-31T23:00:29.833 に答える
-1

Win_32 製品は避けてください。ここを参照してください。

CreateObject("WindowsInstaller.Installer")代わりに使用してください。

于 2013-04-22T20:24:16.247 に答える