1

我有一个简单而有趣的问题。

我需要从 C# 应用程序启动一个进程(node.js 服务器)。

我找到了一段代码,解释了如何从应用程序中启动服务器。

 Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.FileName = @"c:\node\node.exe";**//Path to node installed folder****
        string argument = "\\ bundle\main.js";
        p.StartInfo.Arguments = @argument;
        p.Start();

我的问题是:如果父进程(C# 应用程序)崩溃,这个进程会发生什么?子进程会退出/崩溃还是会继续运行,因为它是一个完全独立的程序?

在它继续运行的情况下,是否有办法“链接”这两个进程以确保在父进程崩溃时子进程退出?

4

1 回答 1

0

试过你的代码如下,如果你想关闭你的进程,你必须使用这个函数, process.CloseMainWindow();这将关闭你开始的进程。

public static void Main()
{    
     System.Diagnostics.Process process = new System.Diagnostics.Process();
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
     startInfo.FileName = "cmd.exe";
     process.StartInfo = startInfo;
     process.Start();
     Console.ReadLine();
     process.CloseMainWindow();
     process.Close();
}

在上面的代码中,我开始了cmd.exe,因为它有自己的窗口,所以我编写CloseMainWindow()了关闭该程序的代码功能。

由于 Cmd 是单独的进程,因此当您关闭启动它的程序时它不会关闭。

如果父进程崩溃(在 process.CloseMainWindow(); 之前),这个进程会继续运行吗?

问题的答案是:如果父级在调用 CloseMainWindow 之前关闭,Cmd 进程将不会关闭

试试这个检查它

public static void Main()
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = "cmd.exe";
        process.StartInfo = startInfo;
        process.Start();
        throw new Exception("test");
        Console.ReadLine();
        process.CloseMainWindow();
        process.Close();
}

在上面的代码中,主程序出现异常,它在关闭子进程之前创建,然后在这种情况下子进程将运行。

如果要在应用程序关闭时强制关闭外部启动的进程,则可以使用Application.ApplicationExit 事件,并调用外部进程对象的 CloseMainWindow() 函数。

于 2017-12-11T10:15:20.157 回答