SetServiceStatus成功,但似乎没有效果
本文关键字:有效果 成功 SetServiceStatus | 更新日期: 2023-09-27 18:18:00
我遵循MSDN演练,通过从ServiceBase派生来编写服务。它建议调用SetServiceStatus来指示SERVICE_STOP_PENDING的方法。我认为这意味着你的进程不会被终止,直到你用SERVICE_STOPPED调用它。我覆盖了OnStop并添加了以下代码:
checkpoint = 1;
// Update the service state to Stop Pending.
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwServiceType = ServiceType.SERVICE_WIN32_OWN_PROCESS;
serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING;
serviceStatus.dwControlsAccepted = 1;
serviceStatus.dwWin32ExitCode = 0;
serviceStatus.dwServiceSpecificExitCode = 0;
serviceStatus.dwCheckPoint = checkpoint++;
serviceStatus.dwWaitHint = 10000;
SetLastError(0);
if (!SetServiceStatus(this.ServiceHandle, ref serviceStatus))
TextOut("OnStop SetServiceStatus failed: " + Marshal.GetLastWin32Error());
timer = new System.Timers.Timer();
timer.Interval = 50;
timer.Elapsed += timer_Elapsed;
timer.Start();
然而,timer_Elapsed没有被调用,我的进程突然终止。谁能告诉我我哪里做错了?
我在回答自己的问题。我决定在等待进程完成清理时在循环中使用一个简单的sleep(),所以我不会使用ServiceStatus。
似乎一旦你从OnStop()返回,你就被无条件终止了,但这只是一个猜测。