Windows服务停止时,子进程被终止

时间:2018-03-22 12:44:21

标签: c# windows-services nssm

我有一个小的C#控制台应用程序,它监视一些已配置的进程/应用程序,这些也是C#控制台应用程序,并使它们保持运行,以便在它们崩溃时启动它们。如果我通过执行exe文件(在交互模式下)运行此监视器控制台应用程序,它的效果很好。但是,如果我使用NSSM将此应用程序安装为Windows服务,则当服务停止时,受监视的进程将被终止,这不是我想要的。

要重现的最小代码(此代码仅启动子进程一次,并且根本不监视它):

监控应用:

class Program
{
    static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();

        startInfo.FileName = "..\\..\\..\\TestApp\\bin\\debug\\TestApp.exe";            

        Process.Start(startInfo);

        Console.WriteLine("Process started");

        Console.Read();
    }
}

受监控的应用:

static void Main(string[] args)
    {
        while (true)
        {
            Console.WriteLine("running...");

            Thread.Sleep(3000);
        }
    }

在Windows服务停止后,有没有办法让这些子进程保持运行?

由于

2 个答案:

答案 0 :(得分:1)

NSSM有一个配置选项,在停止服务时不会终止整个进程树。

您可以在界面中使用nssm.exe edit "my service name"或直接使用nssm.exe set "my service name" AppKillProcessTree 0配置此内容。

答案 1 :(得分:0)

尝试将startInfo.UseShellExecute = true;用于“子”进程。这将从shell作为单独/独立的进程执行该过程。