0
我遵循此MSDN walkthrough通过从ServiceBase派生编写服务。它建议调用SetServiceStatus来指示SERVICE_STOP_PENDING。我收集这意味着你的过程不会被终止,直到你用SERVICE_STOPPED调用它。我推翻调用OnStop,并添加以下代码:SetServiceStatus成功,但似乎没有效果
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不会被调用,我的过程中突然终止。谁能告诉我我做错了什么?
运行OnStop()方法时,它已经具有该状态值。由ServiceBase提供。所以没有明显的理由来帮助。 –
没错。从OnStop返回后,我一直在寻找停留在停止状态的方法。我参考的演练中,您已将状态设置为OnStart方法中的START_PENDING;从你的评论我猜这也是不必要的。并在方法结束时将状态设置为RUNNING;我猜也是不必要的。 – Will