Правильная остановка/запуск службы windows

291
25 апреля 2017, 05:01

Нашёл на просторах интернета такой код:

private static ServiceController ser { get; set; }
using (ser = new ServiceController("MpsSvc")) 
{
       ser.Start();
       label.Visible = true;
       label.Text = "Служба запущена!";
       ser.Close();
}

Иногда работает, иногда нет.

Можно ли к выше указанному коду прикрутить проверку существования службы + проверку запуска службы ( если служба остановлена запустить)

Нужно ли использовать get;set; для таких целей?

Переделал так, поправьте если не правильно)

 private void StopService_Click(object sender, EventArgs e)
        {
            using (var serviceController = new ServiceController("sevice"))
            {
                if (CheckService.CheckIfServiceExists("sevice"))
                {
                    serviceController.Stop();
                    serviceController.WaitForStatus(ServiceControllerStatus.Stopped);
                    label.Visible = true;
                    label2.Text = "Служба остановлена";
                    StopService.Visible = false;
                    StartService.Visible = true;
                }
            }
        }

1-й раз проходит нормально, следующий пишет что службу не удалось остановить/запустить ( хотя перед остановкой служба работает )

С чем это связано?

Answer 1

Вы в любой момент можете проверить статус службы с помощью ServiceController.Status

Для проверки существования службы получайте список существующих служб и проверяйте присутсвие требуемой вами службы в этом списке:

public bool CheckIfServiceExists(string serviceName)
{
    var services = ServiceController.GetServices();
    return services.Any(s => s.ServiceName == serviceName);
}

Нужно ли использовать get;set; для таких целей?

Вопрос неясен. На вашем месте я бы вообще убрал это свойство и оформил бы это в виде локальной переменной.

Для проверки действительно ли запустился/остановился сервис используйте ServiceController.WaitForStatus() метод. Передавайте ServiceControllerStatus.Running для ожидания старта сервиса или ServiceControllerStatus.Stopped для ожидания остановки сервиса после вызова функций ServiceController.Start() и ServiceController.Stop() соответсвенно.

Пример старта сервиса:

using(var serviceController = new ServiceController(ИмяСервиса))
{
    serviceController.Start();
    serviceController.WaitForStatus(ServiceControllerStatus.Running);
}
READ ALSO
Передать аргумент из класса в форму

Передать аргумент из класса в форму

Использую метод invoke action в форме работает отменно)

243
Не могу подключить Bootstrap

Не могу подключить Bootstrap

Bootstrap подключается только по адресу localhost/site/ , если вести localhost/site/index/index (это одна и та самая страница )то работать уже не будетПолучатся что...

303
Создание меток программно

Создание меток программно

Допустим имеется массив меток:

223
Система бэкапов на php и cron

Система бэкапов на php и cron

Коллеги, такая задача возникла

291