2016-06-16 8 views
0

Ich habe eine einfache Anwendung, die Windows-Dienste auf meinem Rechner läuft, filtert die Ergebnisse nach ihrem Namen und zeigt Dienstname, Port und Status des Dienstes.Wie kann der Port abgerufen werden, auf dem ein Windows-Dienst ausgeführt wird?

Momentan finde ich erfolgreich den Namen und den Status, aber es fällt mir schwer, einen Weg zu finden, eine Eigenschaft zu finden, die sich auf den Port bezieht. Habe ich Zugriff auf diese Informationen mit der folgenden Methode oder müsste ich meinen Ansatz vollständig ändern?

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("SELECT * FROM Win32_Service"); 

ManagementObjectCollection collection = searcher.Get(); 

foreach (ManagementObject obj in collection) 
{ 
    string name = obj["Name"] as string; 

    if (name.StartsWith("something")) 
    { 
    string pathName = obj["PathName"] as string; 
    string status = obj["State"] as string;  
    //string port = ??; 

    MyService sc = new MyService() 
     { 
      Name = name, 
      Status = status, 
      //Port = port, 
      Updated = true 
     }; 
    } 
} 

Vielen Dank!

+0

Windows-Dienst keinen Port (wie die Microsoft .NET Framework NGEN erforderlichen Dienste haben für jede Version und Plattformtyp), da ein Dienst möglicherweise überhaupt nicht über TCP/IP kommuniziert; Ein Windows-Dienst kann auch mehrere verwenden, z. B. IIS-Admin (der auch IIS-Instanzen verwaltet). Normalerweise hängt die Auswahl des Ports vom Dienst ab, und es wird davon ausgegangen, dass er verfügbar ist. Daher glaube ich nicht, dass sie registriert sind, obwohl der Windows-Netzwerkstapel Verbindungsinformationen für eine bestimmte laufende Anwendung bereitstellen kann. Gibt es einen bestimmten Service oder ein Beispiel? –

+0

Ich sehe, danke für die Erklärung. Ja, Dienste, die ich aufliste, sind spezifisch, da ich sie manuell über andere Anwendungen, die ich entwickelt habe, erstellt habe. Als Problemumgehung habe ich den ausgewählten Port im Serviceerstellungspfad innerhalb seines ausführbaren Pfads gespeichert, aber es gibt einige, bei denen dieser Ansatz nicht implementiert ist. –

Antwort

Verwandte Themen