2009-03-10 23 views
7

Cụ thể, tôi đang làm việc với một ứng dụng chỉ chạy trên Server 2008 nếu tính năng "Trải nghiệm trên máy tính" được cài đặt và tôi muốn trình cài đặt của ứng dụng đó xác minh nó ở đó.Làm thế nào tôi có thể kiểm tra chương trình nếu một tính năng máy chủ được cài đặt trong Windows Server 2008?

Cách duy nhất tôi biết hiện tại là chạy ServerManagerCmd -query và phân tích cú pháp đầu ra; Tôi muốn một cái gì đó nhẹ hơn (như kiểm tra một khóa registry).

Trả lời

8

Đây là đoạn mã về những gì tôi sử dụng để thực hiện khi chạy.

public static bool isServerFeatureInstalled(Win32_ServerFeature_ID id) 
{ 
    bool idFound = false; 
    ConnectionOptions connectionOptions = new ConnectionOptions(); 
    ManagementScope managementScope = 
     new ManagementScope(
      @"\\localhost\root\cimv2", connectionOptions); 

    ObjectQuery oQuery = 
     new ObjectQuery("SELECT Id FROM Win32_ServerFeature"); 
    ManagementObjectSearcher oSearcher = 
     new ManagementObjectSearcher(managementScope, oQuery); 
    ManagementObjectCollection oReturnCollection = oSearcher.Get(); 

    foreach (ManagementObject oReturn in oReturnCollection) 
    { 
     if ((uint) (oReturn["ID"]) == (uint) id) 
     { 
      return true; 
     } 
    } 
    return idFound; 
} 

// short list of names and values taken from MSDN. 
public enum Win32_ServerFeature_ID 
{ 
    Application_Server = 1, 
    Web_Server = 2, 
    Media_Server = 3, 
    Windows_Sharepoint_Services = 4, 
    Fax_Server = 5, 
    File_Services = 6, 
    Print_Services = 7, 
    Active_Directory_Federation_Services = 8, 
    Active_Directory_Lightweight_Directory_Services = 9, 
    Active_Directory_Domain_Services = 10, 
    UDDI_Services = 11, 
    DHCP_Server = 12, 
    DNS_Server = 13, 
    Network_Policy_and_Access_Services = 14, 
    Certificate_Server = 16, 
    Active_Directory_Rights_Management_Services = 17, 
    Terminal_Services = 18, 
    Windows_Deployment_Services = 19, 
    Failover_Clustering = 33, 
    Network_Load_Balancing = 34, 
    Desktop_Experience = 35, 
    DOTNET_Framework_30 = 36, 
} 
+0

Điều này rất hay ... và giúp tôi giải quyết vấn đề của mình (http://stackoverflow.com/questions/25573129/how-to-find-roles-on-a-server) Làm sao bạn biết được máy đã được nâng cấp lên bộ điều khiển miền? – user3174075

+1

Tôi đã thử mã của bạn và tôi nhận được một ngoại lệ "không hợp lệ lớp" trên này 'foreach (ManagementObject oReturn in oReturnCollection)' - bất kỳ ý tưởng? – user3174075

+0

Tôi gặp lỗi giống như @ user3174075 –

0

Ngày thử nghiệm Windows 2008 x64 máy chủ std của tôi chạy lệnh này (thêm vai trò):

ServerManagerCmd.exe -install AS-AppServer-Foundation 

thêm khóa registry này:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppServer 

Lệnh này (loại bỏ vai trò) :

ServerManagerCmd.exe -remove AS-AppServer-Foundation 

xóa khóa. Vì vậy, tôi nghĩ rằng đó là một đủ tốt của một chỉ số. Đây chỉ là kết quả của nghiên cứu/thử nghiệm của riêng tôi và không phải là cách thức chính thức/được hỗ trợ để phát hiện nếu vai trò AppServer được định cấu hình.

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