Я хочу запросить список служб, работающих как конкретный пользователь на удаленной машине, а затем проверить работоспособность каждого из них. Я создаю пользовательскую консоль.
В С#, как я запрашиваю список запущенных сервисов на сервере Windows?
Ответ 1
Чтобы использовать метод ServiceController, я бы проверил решение с олицетворением, реализованным в этом предыдущем вопросе: .Net 2.0 ServiceController.GetServices( )
FWIW, здесь С#/WMI с явным хостом, именем пользователя, паролем:
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));
}
}
Ответ 2
ServiceController.GetServices( "machineName" ) возвращает массив объектов ServiceController для конкретной машины.
Это:
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();
}
}
}
дает:
Услуга "Опыт применения" в настоящее время выполняется.
Служба обслуживания фильтров Andrea ST в настоящее время выполняется.
Служба шлюза уровня приложения служба в настоящее время остановлена.
Служба информации о приложении в настоящее время выполняется.
и т.д...
Конечно, я использовал версию без параметров для получения услуг на моей машине.
Ответ 3
Вы можете использовать wmi для этого (System.Management). Вы также можете использовать ServiceController.GetServices().
Ответ 4
Это проверит ваше системное имя службы с вашим желаемым именем службы, которое вы можете указать в параметре
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;
}
}
}