5

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

Googleの簡単なスキャンで見たすべての例は、「C:\ Program Files \ Microsoft SQL Server \ 90 \ SDK \ Assembly\Microsoft.SqlServer.Smo.dllを探す」のバリエーションでした。このアプローチの問題は、SQL Server2005でのみ機能することです。SQLServer2008がインストールされている唯一のSQLServerである場合、パスは異なります。

4

5 に答える 5

6

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

SOFTWARE \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion-これは明らかにメインキーであり、SMOの一部のバージョンがインストールされていることを示しています。

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

同じことがSQL2012にも当てはまります:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

しかし、SQL2005ではありません!このマシンにも2005がインストールされていますが。

もう1つ、SMOはMicrosoft SQL ServerシステムのCLRタイプに依存しているため、通常はMicrosoftSQLServerシステムのCLRタイプも必要になります。SQLSysClrTypes.msiには、SOFTWARE \ Microsoft \ Microsoft SQL Server \ RefCount\SQLSysClrTypesという1つのレジストリキーしかありません。

于 2012-03-23T22:21:48.047 に答える
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;
}
于 2008-09-03T20:59:35.003 に答える
3

私がやっていることは、SMO オブジェクトのインスタンスを作成しようとすることです。失敗した場合、そこにはありません。

于 2008-11-14T23:10:37.130 に答える
1

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

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

このキーが存在するかどうかを確認できます (および値が 11 より大きいかどうかを確認します)。

于 2013-04-17T14:07:46.173 に答える
0

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

上記のレジストリ キーは、バージョンをインストールすると更新されるため、SMO 2014 をインストールした場合は 12.x が表示されますが、後で SMO 2012 をインストールすると、このバージョンは 11.x に変更されます。 2014 のインストールを修復すると、バージョンは再び 12.x になります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server 2012 Redist\SharedManagementObjects\1033\CurrentVersion をよく見てください。

または HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SharedManagementObjects\1033\CurrentVersion

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

于 2015-06-04T10:55:33.043 に答える