繁体   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