Как запустить, остановить и проверить, существует ли служба с C # в WinForms

Сервис — это приложение, почти как любое другое, единственное отличие между сервисами и другими программами заключается в том, что они работают в фоновом режиме и не имеют пользовательского интерфейса, на который можно щелкнуть или нажать. В этой статье вы узнаете, как проверить, существует ли служба в Windows, как ее легко запустить или остановить в соответствии с вашими потребностями в приложении WinForms.

1. Добавьте ссылку на ServiceProcess.dll

Чтобы остановить или запустить службу, нам понадобится класс ServiceController. Этот класс представляет службу Windows и позволяет подключаться к работающей или остановленной службе, манипулировать ею или получать информацию о ней. Эта функция включена в System.ServiceProcess.dll сборка, которая не может быть импортирована напрямую с вашим кодом в ваш класс.

В качестве первого шага щелкните правой кнопкой мыши свой проект в обозревателе решений, затем выберите добавлять и из выпадающего меню выберите Ссылка.

Добавьте ссылку на DLL в ваш проект WinForms

Теперь из всплывающего окна перейдите к Вкладка рамки на левой стороне и искать System.ServiceProcess вариант в списке. Выберите его и нажмите ОК.

Импорт ServiceProcess.dll

Теперь DLL должна быть импортирована в ваш проект и готова к использованию.

2. Импортируйте класс

Импортируйте следующий тип с помощью директивы using в верхней части вашего класса:

using System.ServiceProcess;

И теперь вы сможете использовать класс ServiceController, который нам понадобится для запуска или остановки службы.

3. Функции

Теперь используйте класс ServiceController для выполнения всех возможных задач с помощью службы Windows, как показано в следующих примерах

Заметка

Не забудьте добавить using System.ServiceProcess; в верхней части вашего класса, чтобы получить доступ к классам услуг. Кроме того, все эти методы будут работать с названием сервиса, вы можете увидеть список всех установленных сервисов при открытии окна. services.msc

А. Проверьте, существует ли сервис

Чтобы проверить, существует ли служба, вы можете создать следующий пользовательский метод bool, который проверяет, существует ли служба по ее имени:

///
/// Verify if a service exists
///
/// Service name
///
public bool serviceExists(string ServiceName)
{
return ServiceController.GetServices().Any(serviceController => serviceController.ServiceName.Equals(ServiceName));
}

И это может быть легко использовано как:

if (serviceExists("mysql"))
{
Console.WriteLine("Service exists");
}
else
{
Console.WriteLine("Service doesn't exists");
}

Б. Запустите сервис

Используйте следующий метод для запуска службы по ее имени:

///
/// Start a service by it's name
///
///
public void startService(string ServiceName)
{
ServiceController sc = new ServiceController();
sc.ServiceName = ServiceName;
Console.WriteLine("The {0} service status is currently set to {1}", ServiceName, sc.Status.ToString());
if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.
Console.WriteLine("Starting the {0} service ...", ServiceName);
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
// Display the current service status.
Console.WriteLine("The {0} service status is now set to {1}.", ServiceName , sc.Status.ToString());
}
catch (InvalidOperationException e)
{
Console.WriteLine("Could not start the {0} service.", ServiceName);
Console.WriteLine(e.Message);
}
}
else
{
Console.WriteLine("Service {0} already running.", ServiceName);
}
}

C. Остановить службу

Используйте следующий метод, чтобы остановить установленную службу по ее имени:

///
/// Stop a service that is active
///
///
public void stopService(string ServiceName)
{
ServiceController sc = new ServiceController();
sc.ServiceName = ServiceName;
Console.WriteLine("The {0} service status is currently set to {1}", ServiceName , sc.Status.ToString());
if (sc.Status == ServiceControllerStatus.Running)
{
// Start the service if the current status is stopped.
Console.WriteLine("Stopping the {0} service ...", ServiceName);
try
{
// Start the service, and wait until its status is "Running".
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
// Display the current service status.
Console.WriteLine("The {0} service status is now set to {1}.", ServiceName, sc.Status.ToString());
}
catch (InvalidOperationException e)
{
Console.WriteLine("Could not stop the {0} service.", ServiceName);
Console.WriteLine(e.Message);
}
}
else
{
Console.WriteLine("Cannot stop service {0} because it's already inactive.", ServiceName);
}
}

D. Проверьте, активен ли сервис

Как вы можете видеть, в предыдущих методах вы не можете запустить службу, которая уже активна, или остановить службу, которая уже неактивна. Если вы работаете в функции «Перезагрузка службы», вы можете создать следующий метод, чтобы проверить, работает ли служба:

///
///  Verify if a service is running.
///
///
public bool serviceIsRunning(string ServiceName)
{
ServiceController sc = new ServiceController();
sc.ServiceName = ServiceName;
if (sc.Status == ServiceControllerStatus.Running)
{
return true;
}
else
{
return false;
}
}

E. перезагрузить сервис

Чтобы перезагрузить службу, вам понадобятся все предыдущие методы, включенные в ваш класс:

///
/// Reboots a service
///
///
public void rebootService(string ServiceName)
{
if (serviceExists(ServiceName))
{
if (serviceIsRunning(ServiceName))
{
stopService(ServiceName);
}
else
{
startService(ServiceName);
}
}else
{
Console.WriteLine("The given service {0} doesn't exists", ServiceName);
}
}

И используйте это как:

rebootService("mysql");
Ссылка на основную публикацию
Adblock
detector