todas - En C#, ¿cómo puedo consultar la lista de servicios en ejecución en un servidor Windows?
salir de la aplicación c# (4)
Esto verificará el nombre de servicio de su sistema con el nombre de servicio deseado que puede mencionar en 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;
}
}
}
Quiero consultar una lista de servicios que se ejecutan como un usuario específico en una máquina remota y luego verificar el estado de cada uno. Estoy construyendo una consola personalizada.
Para usar el método ServiceController, verificaba la solución con suplantación implementada en esta pregunta anterior:
FWIW, aquí está la forma C # / WMI con host explícito, 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));
}
}
Puedes usar wmi para esto (System.Management). También puede utilizar ServiceController.GetServices()
.
ServiceController.GetServices("machineName")
devuelve una matriz de objetos ServiceController
para una máquina en particular.
Esta:
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:
The Application Experience service is currently Running.
The Andrea ST Filters Service service is currently Running.
The Application Layer Gateway Service service is currently Stopped.
The Application Information service is currently Running.
etc...
Por supuesto, usé la versión sin parámetros para obtener los servicios en mi máquina.