Я хочу написать службу Windows для инициализации аппаратного устройства при загрузке Windows.К сожалению, для инициализации требуется до 10 секунд.Поскольку от него зависит другой сервис (и он должен запускаться, если мой сервис был завершен), статус сервиса должен сохраняться на SERVICE_START_PENDING
во время инициализации и меняться на SERVICE_RUNNING
после того, как все было сделано.
Срок выполненияиз-за того, что я собираю данные с помощью асинхронных процессов (с событиями), я не могу выполнить всю обработку в функции OnStart
.Основываясь на информации с веб-сайта Microsoft , я попытался выполнить следующую процедуру:
protected override void OnStart(string[] args)
{
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
serviceStatus.dwWaitHint = 100000;
serviceStatus.dwControlsAccepted = 0x00000000; // none
serviceStatus.dwCheckPoint= 1; // Initialize checkpoint
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
/* Starting the asynchronous processes */
}
void OutputDataReceived_Event(object sender, DataReceivedEventArgs e)
{
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
serviceStatus.dwControlsAccepted = 0x00000000;
serviceStatus.dwCheckPoint++; // Increment checkpoint
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
/* Do initialization things */
/* Call "InitializationDone()" if all was done */
}
void InitializationDone()
{
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
serviceStatus.dwControlsAccepted = 0x00000001; // SERVICE_ACCEPT_STOP
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
}
Однако диспетчер управления службами немедленно указывает, что моя служба имеет значение SERVICE_RUNNING
после того, как метод OnStart
выполнено, что привело к слишком раннему запуску зависимой службы . Как я могу отложить статус услуги SERVICE_RUNNING
?
Я уже потратил много часов на эту тему безуспешно !!