2009-05-09 21 views

Respuesta

21

Para utilizar el método ServiceController Me echa un vistazo a la solución con suplantación implementada en esta pregunta anterior: .Net 2.0 ServiceController.GetServices()

Fwiw, aquí es C#/forma de WMI con el anfitrión explícita, nombre de usuario, contraseña:

using System.Management; 

static void EnumServices(string host, string username, string password) 
{ 
    string ns = @"root\cimv2"; 
    string query = "select * from Win32_Service"; 

    ConnectionOptions options = new ConnectionOptions(); 
    if (!string.IsNullOrEmpty(username)) 
    { 
     options.Username = username; 
     options.Password = password; 
    } 

    ManagementScope scope = 
     new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options); 
    scope.Connect(); 

    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher(scope, new ObjectQuery(query)); 
    ManagementObjectCollection retObjectCollection = searcher.Get(); 
    foreach (ManagementObject mo in retObjectCollection) 
    { 
     Console.WriteLine(mo.GetText(TextFormat.Mof)); 
    } 
} 
+0

Gracias. Todas las respuestas me ayudaron a señalar WMI y System.Management. Me gustó la consulta y usé este fragmento. thx nuevamente. -k2 – kkelly18

+0

@AK_ ¿Por qué revertiste mi edición? – Dan

+0

@Dan lo siento, rodé hacia atrás en la pestaña incorrecta ... lo arreglé ... –

5

Puede usar wmi para esto (Administración del sistema). También puede usar ServiceController.GetServices().

34

ServiceController.GetServices ("machineName") devuelve una matriz de objetos ServiceController para una máquina en particular.

Este:

namespace AtYourService 
{ 
    using System; 
    using System.ServiceProcess; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      ServiceController[] services = ServiceController.GetServices(); 

      foreach (ServiceController service in services) 
      { 
       Console.WriteLine(
        "The {0} service is currently {1}.", 
        service.DisplayName, 
        service.Status); 
      } 

      Console.Read(); 
     } 
    } 
} 

produce:

la aplicación de servicio La experiencia es actualmente en ejecución.

El servicio Andrea ST Filters Service se está ejecutando.

El servicio Application Layer Gateway Service actualmente está detenido.

El servicio de información de la aplicación es actualmente ejecutándose.

etc ...

Por supuesto, he utilizado la versión sin parámetros para obtener los servicios en mi máquina.

3

Esto comprobará el nombre del servicio de su sistema con su nombre de servicio deseado, el cual se puede mencionar el parámetro

namespace ServiceName 
{ 
using System; 
using System.ServiceProcess; 

class Service 
{ 

public static bool IsServiceInstalled(string serviceName) 
{ 

ServiceController[] services = ServiceController.GetServices(); 

foreach (ServiceController service in services) 
{ 
    if (service.ServiceName == serviceName) 
    return true; 
} 
return false; 
    } 
} 
} 
Cuestiones relacionadas