2008-09-03 48 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 2008-11-13 19:37:16

回答

3

這是一種笨重的,但快速檢查註冊表似乎工作。在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; 
} 
3

我只是嘗試創建一些SMO對象的實例。如果失敗了,它不在那裏。

6

我看了一下SQL2008 R2功能包和我的Windows註冊表(本機上安裝了SQL2008 R2 Dev)中的SharedManagementObjects.msi,我相信這些是應該用來檢測SMO的註冊表項HKLM):

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 SQL Server的2012的Redist \ SharedManagementObjects \ 1033 \ CURRENTVERSION

但不SQL2005!即使我在這臺機器上也安裝了2005版本。

還有一件事,因爲SMO依賴於它們,所以通常還需要Microsoft SQL Server系統CLR類型。 的SQLSysClrTypes.msi只有一個註冊表項: SOFTWARE \微軟\ Microsoft SQL Server的\引用次數\ SQLSysClrTypes

+0

對於可重新分發的CLR類型,註冊表項似乎是'HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2008 Redist \ SQL Server系統CLR類型`。您可能想要檢查的信息(如版本)位於子鍵中。 – jpmc26 2013-11-08 08:24:16

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。X 如果再決定修復2014年製作安裝,那麼版本將再次12.x的

你最好看一下: HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ Microsoft SQL Server的2012的Redist \ SharedManagementObjects \ 1033 \ CURRENTVERSION

或HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ Microsoft SQL Server的2014的Redist \ SharedManagementObjects \ 1033 \ CURRENTVERSION

是否有人知道,如果1033有保證?

+0

嗨,我已經測試過了,它不保證它是1033(它取決於正在安裝的SMO)。 – Saragani 2015-06-17 10:23:51

相關問題