2008-09-03 9 views
5

SMOを使用して使用可能なSQL Serverとデータベースのリストを作成するコードがあります。 SQL Server 2000はサポートされなくなりましたが、SQL Server 2000でSMOライブラリがインストールされていないマシンでコードが実行される可能性があります。 SMOを最初にチェックし、ユーザーの顔に爆発するのではなく、正常に機能を低下させたいと思います。 SMOがマシン上で利用可能かどうかを検出する最良の方法は何ですか?SMOの存在を検出する最良の方法は何ですか?

私がすばらしいGoogleスキャンで見たすべての例は、「C:¥Program Files¥Microsoft SQL Server¥90¥SDK¥Assemblies¥Microsoft.SqlServer.Smo.dll」のバリエーションです。このアプローチの問題点は、SQL Server 2005のみで動作することです.SQL Server 2008がインストールされている唯一のSQL Serverの場合は、パスが異なります。

+1

関連する質問:同じコードを2005年と2008年に使用する問題に直面しましたか?はいの場合、どのように解決しましたか? – Mostlyharmless

答えて

3

これは一種のものですが、レジストリのクイックチェックが機能しているようです。 HKEY_CLASSES_ROOTでは、SMOアセンブリから多数のクラスが登録されます。私がする必要があったのは、SMOクラスの1つを選択し、同じ名前のキーの存在をチェックすることでした。次の関数は、SMOがインストールされている場合はtrue、そうでない場合はfalseを返します。

private bool CheckForSmo() 
{ 
    string RegKeyName = @"Microsoft.SqlServer.Management.Smo.Database"; 
    bool result = false; 
    Microsoft.Win32.RegistryKey hkcr = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(RegKeyName); 
    result = hkcr != null; 

    if (hkcr != null) 
    { 
     hkcr.Close(); 
    } 

    return result; 
} 
3

私は何らかのSMOオブジェクトのインスタンスを作成しようとしています。それが失敗すれば、そこにはありません。

6

SQL2008 R2の機能パックとWindowsレジストリ(SQL2008 R2 Devがこのマシンにインストールされています)からSharedManagementObjects.msiを見ました。これらはSMOの検出に使用するregキーですHKLM):

SOFTWARE \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion - SMOの一部のバージョンがインストールされていることを示す主キーです。

ソフトウェア\マイクロソフト\マイクロソフトSQL Server 2008 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion - これはおそらく2008年英語がインストールされていることを意味します。おそらくSOFTWARE \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjectsの存在を確認するだけで十分です。同じ

はSQL2012に適用されます。Microsoft \ Microsoft SQL Serverの2012年のRedist \ HKEY_LOCAL_MACHINE \ソフトウェア\ SharedManagementObjects 1033 \ \ CurrentVersionの

ではなく、SQL2005!私は2005年もこのマシンにインストールしています。

もう1つのことは、SMOがそれらに依存しているので、通常はMicrosoft SQL Server System CLR Typesも必要になります。 SQLSysClrTypes.msiが一つだけのレジストリキーがあります。 SOFTWARE \マイクロソフト\ Microsoft SQL Serverの\ RefCountプロパティ\ SQLSysClrTypes

+0

再配布可能なCLRタイプでは、レジストリキーは 'HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2008 Redist \ SQL Server System CLR Types'のようです。確認したい情報(バージョンなど)は、サブキーにあります。 – jpmc26

1

SQL Server 2012のためのソリューション:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion\Version 

あなたはこのキーが存在するかどうかを確認(チェックできます値が11より大きい場合)。

0

HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion \ Versionは、複数のバージョンがインストールされている可能性があるため、インストールされている現在のバージョンを表していません。

上記のレジストリキーは、バージョンをインストールするときに更新されるため、SMO 2014をインストールした場合12.xが表示されますが、SMO 2012をインストールすると、このバージョンは11に変更されます。1033 \ CurrentVersionの

\ HKEY_LOCAL_MACHINE \ソフトウェア\マイクロソフト\のMicrosoft SQL Server 2012の再頒布可能パッケージの\ SharedManagementObjects:あなたはその後、2014 installtionを修復することを決定した場合、その後のバージョンが再び12.xの

あなたは良く見なければならないだろうX

またはMicrosoft \ Microsoft SQL Serverの2014再頒布可能パッケージのHKEY_LOCAL_MACHINE \ SOFTWARE \ \ SharedManagementObjects \ 1033 \ CurrentVersionの

1033が保証されている場合、誰かが知っていますか? (意味英語版のみ)

+0

こんにちは、私はそれをテストした、それは1033です(それはインストールされているSMOに依存します)。 – Saragani

関連する問題