【问题标题】:Child process is killed when windows service is stoppedwindows服务停止时子进程被杀死
【发布时间】:2018-03-22 12:44:20
【问题描述】:

我有一个小型 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服务停止后让这些子进程继续运行?

谢谢

【问题讨论】:

    标签: c# windows-services nssm


    【解决方案1】:

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

    您可以在 UI 中使用nssm.exe edit "my service name" 或直接使用nssm.exe set "my service name" AppKillProcessTree 0 进行配置。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我现在已经尝试过了,但没有成功:((我也尝试过 CreateNoWindow 属性和其他一些属性)
      猜你喜欢
      • 2018-06-08
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多