2009-03-10 8 views
7

Insbesondere arbeite ich mit einer Anwendung, die nur auf Server 2008 ausgeführt wird, wenn die Funktion "Desktop Experience" installiert ist, und ich möchte, dass das Installationsprogramm dieser Anwendung überprüft, ob es dort ist.Wie kann ich programmgesteuert überprüfen, ob eine Serverfunktion in Windows Server 2008 installiert ist?

Die einzige Möglichkeit, die ich derzeit kenne, ist ServerManagerCmd -query ausführen und die Ausgabe analysieren; Ich würde etwas leichteres bevorzugen (wie das Überprüfen eines Registrierungsschlüssels).

Antwort

8

Dies ist ein Code-Snippet von dem, was ich verwende, um es zur Laufzeit zu tun.

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

Das ist sehr nett ... und bringt mich auf die Hälfte meines Problems (http://stackoverflow.com/questions/25573129/how-to-find-roles-on-a-server) Woher weißt du, ob Die Maschine wurde jedoch zu einem Domänencontroller befördert? – user3174075

+1

Ich habe versucht, Ihren Code und ich bekomme eine "ungültige Klasse" Ausnahme auf dieser Foreach (ManagementObject oReturn in oReturnCollection) - irgendwelche Ideen? – user3174075

+0

Ich bekomme den gleichen Fehler wie @ user3174075 –

0

Auf meinem Test Windows 2008 x64 std Server ausgeführt wird diesen Befehl (fügt die Rolle):

ServerManagerCmd.exe -install AS-AppServer-Foundation 

diesen Registrierungsschlüssel ergänzt:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppServer 

Dieser Befehl (entfernt die Rolle) :

ServerManagerCmd.exe -remove AS-AppServer-Foundation 

entfernt den Schlüssel. Also würde ich denken, dass es ein Indikator ist. Dies sind nur die Ergebnisse meiner eigenen Forschung/Experiment und ist keine offizielle/unterstützte Möglichkeit zu erkennen, ob AppServer Rolle konfiguriert ist.

Verwandte Themen