Когда Start-Service узнает, что служба win фактически завершила процесс полного запуска и находится в полностью рабочем состоянии? - PullRequest
0 голосов
/ 10 января 2019

Когда я создаю сервис win, я начинаю прослушивать указанный порт. Я хочу быть уверен, что весь процесс прослушивания на этом порту успешно завершен до того, как служба получит статус выполнения и команда Start-Service будет завершена.

Когда я вызываю Start-Service -Name $NameOfTheService в Powershell, когда powershell решает перейти к следующей инструкции?

Может ли этот код вызвать потенциальные проблемы:

public WinService()
{
    InitializeComponent();
    OpenPortsCreateEndpoints();
}

Должен ли я открыть открытые порты, например, в protected override void OnStart(string[] args) или где-то еще?

1 Ответ

0 голосов
/ 10 января 2019

Powershell не взаимодействует со службой напрямую, он использует встроенный диспетчер управления службами (SCM).

Powershell запрашивает SCM для запуска службы, после чего служба сообщает SCM о своем состоянии. Сам Powershell просто ждет, пока SCM покажет, что статус службы Running, прежде чем продолжить.

Службы обычно сообщают о своем статусе как SERVICE_START_PENDING во время инициализации, а затем сообщают SERVICE_RUNNING, когда они находятся в состоянии готовности.


Метод OnStart должен вернуться в операционную систему после начала работы службы. Он не должен зацикливаться вечно или блокироваться, поэтому используйте его только для инициализации службы.

Пошаговое руководство. Создание приложения-службы Windows охватывает все основы и содержит пример кода для Установка статуса службы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...