#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() - приостановка или остановка сервиса.
Комментариев нет:
Отправить комментарий