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