检测SMO是否存在的最佳方法是什么?

时间:2020-03-05 18:47:15  来源:igfitidea点击:

我有一些使用SMO填充可用SQL Server和数据库列表的代码。尽管我们不再支持SQL Server 2000,但是代码可能会在装有SQL Server 2000且未安装SMO库的计算机上运行。我希望先检查SMO并优雅地降级功能,而不必大惊小怪。检测SMO是否在计算机上可用的最佳方法是什么?

我通过快速Google扫描看到的每个示例都是"查找C:\ Program Files \ Microsoft SQL Server \ 90 \ SDK \ Assemblies \ Microsoft.SqlServer.Smo.dll"的变体。这种方法的问题在于它仅适用于SQL Server2005. 如果仅安装了SQL Server 2008,则路径将不同。

解决方案

回答

这有点笨拙,但是快速检查注册表似乎可行。在HKEY_CLASSES_ROOT下,将注册SMO程序集中的许多类。我需要做的就是选择一个SMO类,并检查是否存在具有相同名称的密钥。如果已安装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;
}

回答

我要做的只是尝试创建一些SMO对象的实例。如果失败,则不存在。