2008-09-03 26 views
5

Tôi có một số mã sử dụng SMO để điền danh sách các máy chủ và cơ sở dữ liệu SQL có sẵn. Trong khi chúng tôi không còn hỗ trợ SQL Server 2000, có thể là mã có thể chạy trên một máy tính mà SQL Server 2000 và không có thư viện SMO được cài đặt. Tôi sẽ cố gắng kiểm tra SMO trước và làm suy giảm chức năng một cách duyên dáng thay vì thổi vào mặt người dùng. Cách tốt nhất để phát hiện có hay không SMO có sẵn trên máy?Cách tốt nhất để phát hiện sự hiện diện của SMO là gì?

Mọi ví dụ mà tôi đã xem qua quét nhanh của Google là một biến thể của "tìm C: \ Program Files \ Microsoft SQL Server \ 90 \ SDK \ Assemblies \ Microsoft.SqlServer.Smo.dll". Vấn đề với cách tiếp cận đó là nó chỉ hoạt động với SQL Server 2005. Nếu SQL Server 2008 là SQL Server duy nhất được cài đặt thì đường dẫn sẽ khác nhau.

+1

Câu hỏi liên quan: Bạn có gặp phải vấn đề tạo mã tương tự với năm 2005 và 2008. Nếu có, bạn đã giải quyết nó như thế nào? – Mostlyharmless

Trả lời

3

Đây là loại clunky, nhưng một kiểm tra nhanh chóng của sổ đăng ký dường như làm việc. Theo HKEY_CLASSES_ROOT, một số lượng lớn các lớp từ các hội đồng SMO sẽ được đăng ký. Tất cả những gì tôi cần làm là chọn một trong các lớp SMO và kiểm tra sự tồn tại của khóa có cùng tên. Hàm sau sẽ trả về true nếu SMO đã được cài đặt, sai nếu có.

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

Điều tôi làm chỉ là cố gắng tạo một thể hiện của một số đối tượng SMO. Nếu nó thất bại, nó không có ở đó.

6

Tôi đã xem SharedManagementObjects.msi từ gói tính năng SQL2008 R2 và Windows Registry (SQL2008 R2 Dev được cài đặt trên máy này) và tôi tin rằng đây là các phím reg nên sử dụng để phát hiện SMO (Tất cả theo HKLM):

PHẦN MỀM \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion - đây dường như là khóa chính, cho biết rằng một số phiên bản SMO đã được cài đặt.

PHẦN MỀM \ Microsoft \ Microsoft SQL Server 2008 Tái phân phối \ SharedManagementObjects \ 1033 \ CurrentVersion - phiên bản này có thể có nghĩa là tiếng Anh 2008 được cài đặt. Có lẽ chỉ cần kiểm tra sự hiện diện của SOFTWARE \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjects sẽ đủ.

Cùng áp dụng cho SQL2012: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

Nhưng KHÔNG SQL2005! mặc dù tôi đã cài đặt năm 2005 trên máy này.

Một điều nữa, bạn thường muốn có các loại CLR của Microsoft SQL Server System, vì SMO phụ thuộc vào chúng. Các SQLSysClrTypes.msi chỉ có chìa khóa một registry: SOFTWARE \ Microsoft \ Microsoft SQL Server \ RefCount \ SQLSysClrTypes

+0

Với các kiểu CLR có thể phân phối lại, khóa đăng ký có vẻ là 'HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2008 Các kiểu CLR của Hệ thống Máy chủ SQL \ SQL Server 2008'. Thông tin bạn có thể muốn kiểm tra (như phiên bản) nằm trong các khóa con. – jpmc26

1

Giải pháp cho SQL Server 2012:

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

Bạn có thể kiểm tra xem phím này tồn tại (và kiểm tra nếu giá trị lớn hơn 11).

0

Chỉ cần lưu ý nhanh: HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion \ Version không đại diện cho phiên bản hiện tại được cài đặt, vì có thể có một số phiên bản được cài đặt. Khoá đăng ký ở trên đang được cập nhật khi bạn cài đặt phiên bản, vì vậy nếu bạn đã cài đặt SMO 2014 thì bạn sẽ thấy 12.x, nhưng nếu sau đó bạn cài đặt SMO 2012, thì phiên bản này sẽ thay đổi thành 11.x Nếu bạn sau đó quyết định để sửa chữa 2014 installtion thì phiên bản sẽ là một lần nữa 12.x

Bạn nên trông đẹp hơn tại địa chỉ: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

hoặc HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL server 2014 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

Không ai biết nếu năm 1033 được đảm bảo? (Có nghĩa là chỉ có phiên bản tiếng Anh)

+0

Xin chào, tôi đã thử nghiệm nó, và nó không phải là guranteed rằng nó là 1033 (nó phụ thuộc vào SMO đang được cài đặt). – Saragani

Các vấn đề liên quan