0
これに続いて、ServiceBaseから派生してサービスを書き込むためのMSDN walkthroughが続きました。 SERVICE_STOP_PENDINGを示すSetServiceStatusを呼び出す方法を示します。これは、あなたが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