Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# windows服务停止时,子进程被终止_C#_Windows Services_Nssm - Fatal编程技术网

C# windows服务停止时,子进程被终止

C# windows服务停止时,子进程被终止,c#,windows-services,nssm,C#,Windows Services,Nssm,我有一个小型的C#console应用程序,它可以监控一些配置好的进程/应用程序,这些也是C#console应用程序,让它们保持运行,以便在崩溃时启动它们。如果我通过执行exe文件(在交互模式下)来运行这个监视器控制台应用程序,它会工作得很好。但是,如果我使用NSSM将此应用程序安装为windows服务,则当服务停止时,受监视的进程将被终止,这不是我想要的 要复制的最小代码(此代码仅启动子进程一次,并且根本不监视它): 监控应用程序: class Program { static void

我有一个小型的C#console应用程序,它可以监控一些配置好的进程/应用程序,这些也是C#console应用程序,让它们保持运行,以便在崩溃时启动它们。如果我通过执行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服务停止后保持这些子进程运行


谢谢

尝试使用
startInfo.UseShellExecute=true。这将作为一个单独/独立的进程从shell执行该进程。

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


您可以在UI中使用
nssm.exe编辑“我的服务名称”
或直接使用
nssm.exe设置“我的服务名称”AppKillProcessTree 0来配置此功能

我现在已经尝试过,但没有成功:((我也尝试过CreateNoWindow属性和其他一些属性)