Остановка, запуск, рестарт служб Windows на C#
Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел показать как можно запускать, останавливать, перезапускать службы в Windows на C#. Для этого будем использовать класс ServiceController, который позволяет подключаться к службе, управлять ею и получать сведения о ней. Чтобы работать с этим классом в проект необходимо добавить ссылку на System.ServiceProcess. Сам код:
using System;
using System.ServiceProcess; // нужно добавить ссылку в проект
namespace TestConsoleApp
{
class Program
{
// Экспериментировать будем со службой центра обновления Windows
static void Main(string[] args)
{
StopService("Центр обновления Windows");
StartService("Центр обновления Windows");
RestartService("Центр обновления Windows");
Console.WriteLine("Нажмите клавишу для продолжения...");
Console.ReadLine();
}
// Запуск службы
public static void StartService(string serviceName)
{
ServiceController service = new ServiceController(serviceName);
// Проверяем не запущена ли служба
if (service.Status != ServiceControllerStatus.Running)
{
// Запускаем службу
service.Start();
// В течении минуты ждём статус от службы
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMinutes(1));
Console.WriteLine("Служба была успешно запущена!");
}
else
{
Console.WriteLine("Служба уже запущена!");
}
}
// Останавливаем службу
public static void StopService(string serviceName)
{
ServiceController service = new ServiceController(serviceName);
// Если служба не остановлена
if (service.Status != ServiceControllerStatus.Stopped)
{
// Останавливаем службу
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMinutes(1));
Console.WriteLine("Служба была успешно остановлена!");
}
else
{
Console.WriteLine("Служба уже остановлена!");
}
}
// Перезапуск службы
public static void RestartService(string serviceName)
{
ServiceController service = new ServiceController(serviceName);
TimeSpan timeout = TimeSpan.FromMinutes(1);
if (service.Status != ServiceControllerStatus.Stopped)
{
Console.WriteLine("Перезапуск службы. Останавливаем службу...");
// Останавливаем службу
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
Console.WriteLine("Служба была успешно остановлена!");
}
if (service.Status != ServiceControllerStatus.Running)
{
Console.WriteLine("Перезапуск службы. Запускаем службу...");
// Запускаем службу
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
Console.WriteLine("Служба была успешно запущена!");
}
}
}
}
В данной небольшой статье вы научились управлять службами Windows на C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




