Как включать службы windows и отключать на C#

Если вы разрабатываете приложения на C#, которые взаимодействуют с системными компонентами, вам может понадобиться управление службами Windows: запуск, остановка или перезапуск. Эти действия особенно актуальны для утилит администрирования, установщиков и технических решений, работающих в среде Windows. Ниже приведён базовый листинг кода, который вы можете адаптировать под собственные проекты. Важно отметить, что любые операции с системными службами должны выполняться с правами администратора.

  // Запуск службы
    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("Служба была успешно запущена!");
      }
    }


Так же не забываем добавлять using

using System.ServiceProcess;

Вот еще альтернативный вариант.

Пример кода C# для управления службами:

using System;
using System.ServiceProcess;

class Program
{
    static void Main()
    {
        string serviceName = "wuauserv"; // Имя службы, например, Центр обновления Windows

        ServiceController service = new ServiceController(serviceName);

        try
        {
            Console.WriteLine($"Текущее состояние службы: {service.Status}");

            // Остановка службы
            if (service.Status != ServiceControllerStatus.Stopped &&
                service.Status != ServiceControllerStatus.StopPending)
            {
                Console.WriteLine("Остановка службы...");
                service.Stop();
                service.WaitForStatus(ServiceControllerStatus.Stopped);
                Console.WriteLine("Служба остановлена.");
            }

            // Запуск службы
            Console.WriteLine("Запуск службы...");
            service.Start();
            service.WaitForStatus(ServiceControllerStatus.Running);
            Console.WriteLine("Служба запущена.");
        }
        catch (InvalidOperationException ex)
        {
            Console.WriteLine($"Ошибка управления службой: {ex.Message}");
        }
        catch (System.ComponentModel.Win32Exception ex)
        {
            Console.WriteLine($"Ошибка доступа: {ex.Message}. Убедитесь, что запущено от имени администратора.");
        }
    }
}

Важные замечания:

  • Все операции должны выполняться с правами администратора. Для этого укажите в манифесте приложения requireAdministrator.
  • Имя службы (serviceName) можно узнать в оснастке services.msc.
  • Вы можете дополнить код функционалом для перезапуска, обработки нескольких служб или создания графического интерфейса.

🛠 Полезные команды:

  • sc query — список служб в командной строке Windows.
  • net start / net stop — управление службами вручную.
  • services.msc — графический интерфейс для управления.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.