Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Как на C# проверить, запущена ли служба “Х” или нет, и узнать тип запуска(авто) и изменить параметры-выкл,включить, поставить в автозапуск?

#c_sharp #windows_service


Как на C#  проверить, запущена ли служба Windows "Х" или нет, и узнать тип запуска(авто)
и изменить параметры-выкл,включить, поставить в автозапуск?
    


Ответы

Ответ 1



Есть класс ServiceController. Я думаю, что его функционала будет достаточно и не нужно лезть в WinApi. UPD: Единственное, чего не хватает в ServiceController, как я понял - это смены типа запуска. В этом случае можно вспользоваться методами отсюда. Предлагается: Обратится к WinApi Обратится к WMI Обратится к CMD Еще нашел вариант через реестр: using System; using Microsoft.Win32; public enum ServiceStart { Boot = 0, System = 1, Automatic = 2, Manual = 3, Disabled = 4 } public class ServiceController2 : System.ServiceProcess.ServiceController { public ServiceStart ServiceStart { get { RegistryKey key = Registry.LocalMachine.OpenSubKey( "SYSTEM\\CurrentControlSet\\Services\\" + this.ServiceName ); ServiceStart start = (ServiceStart)key.GetValue("Start"); key.Close(); return (start); } set { RegistryKey key = Registry.LocalMachine.OpenSubKey( "SYSTEM\\CurrentControlSet\\Services\\" + this.ServiceName, true ); key.SetValue( "Start", (int)value ); key.Close(); } } } }

Ответ 2



Список WinAPI: OpenSCManager() + OpenService() - открытие конкретного сервиса по имени. Заодно проверка на наличие такого сервиса в принципе. Потом: QueryServiceStatusEx() - текущее состояние сервиса QueryServiceConfig() - тип запуска ChangeServiceConfig() - изменение параметров, включая тип запуска ControlService() - приостановка или остановка сервиса.

Комментариев нет:

Отправить комментарий