簡體   English   中英

如何從服務內部退出Windows服務?

[英]How do I quit a Windows service from inside the service?

我有Windows服務。 在啟動時,它檢查是否已分配任何工作-如果沒有分配,則退出。 問題是恢復機制設置為“重新啟動服務”。

在此處輸入圖片說明

如果服務合法崩潰,這就是我想要的,但是如果我以編程方式自己退出該服務,則不是。

到目前為止,我在下面嘗試過的所有操作都導致Windows自動重新啟動該服務:

Thread th;
protected override void OnStart(string[] args)
{
    th = new Thread(new ThreadStart(StartMyService));
    th.Start();
}

private void StartMyService()
{
    if (WorkAvailable()) {
      InitWork();
    } else {
      this.ExitCode = 0;  // no errors
      Stop();
    }
}

protected override void OnStop()
{
    // dispose of things

    try
    {
        if (th != null && th.ThreadState == ThreadState.Running)
            th.Abort();
    }
    catch { }

    Environment.Exit(this.ExitCode);
}

我嘗試了不同的ExitCode值,但Windows總是重新啟動服務。 我也嘗試過Environment.FailFast ,結果相同。 我想念什么?

忽略此設計是否良好的問題,操作系統使用故障恢復操作的原因是由於服務故障。

當您調用Stop時,運行時會將服務標記為正在停止。 然后,它調用OnStop方法。 當OnStop方法返回時,它將完成清理,然后退出服務。 如果這是可執行文件中的唯一服務,則可執行文件也會退出。 永遠不需要自己退出該過程。

當您調用Environment.Exit(或Environment.FailFast)時,會導致服務可執行文件突然退出,而ServiceControlManager仍將其列出為正在運行,因此操作系統非常正確地認為該服務已失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM