如何退出单一服务?

How to exit a Mono-service?

我正在尝试完全退出我的单一服务。

我正在构建单一服务,为了便于调试,我 运行 如下:

mono-service --debug /etc/App.exe

这当然很棒,因为我的代码中的 Console.WriteLine("...") 会写到屏幕上。

接下来我要做的是在 OnStart 中添加新线程,因为当然代码(服务)永远不会被视为已启动。

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

当使用 --debug 标志时,控制台写入工作,但它永远不会退出。我只能发出一个kill -9来结束申请。该服务甚至无法重新启动。

如何在启动线程后干净地退出我的单一服务?

花了一段时间,但我终于找到了:Console.IsOutputRedirected。 (.Net 4.5 的一部分)

如果其他人找到这个 post,答案将是:

protected override void OnStart(string[] args)
{
    if(Console.IsOutputRedirected)
    {
        Thread serviceThread = new Thread(new ThreadStart(StartMyApplicationAsync));
        serviceThread.Start();
    } else {
        StartMyApplicationAsync();
    }
}

这样当使用 --debug 开关测试应用程序时,它会 respond/end 到 Ctrl+c