【发布时间】:2018-10-20 10:39:00
【问题描述】:
我想编写一个 Windows 服务来在 Windows Boot 上初始化一个硬件设备。不幸的是,初始化最多需要 10 秒。由于另一个服务依赖于它(如果我的服务已经完成,则应该启动)服务状态应该在初始化期间保持在SERVICE_START_PENDING,并在完成后更改为SERVICE_RUNNING。
由于我使用异步进程(带有事件)捕获数据,我无法在OnStart函数中完成整个处理。
根据Microsoft website 提供的信息,我尝试了以下过程:
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);
}
但是,服务控制管理器在执行OnStart方法后立即将我的服务指示为SERVICE_RUNNING,这导致过早启动依赖服务。 如何延迟服务状态SERVICE_RUNNING?
我已经在那个话题上花费了很多小时但没有成功!!
【问题讨论】:
标签: c# windows asynchronous process windows-services