【发布时间】:2020-05-29 02:58:22
【问题描述】:
我为我的 ARK 服务器制作了一个启动器,我可以在其中轻松更改设置并启动。
我用这个启动服务器:
Process serverprocess = new Process();
serverprocess.StartInfo.FileName = Path.GetFileName(serverpath);
serverprocess.StartInfo.Arguments = launch;
serverprocess.StartInfo.UseShellExecute = false;
serverprocess.Start();
serverprocess.WaitForExit();
但是当我按下 CTRL+C 时,它不会等到 ARK 服务器停止,当我的应用程序被杀死时它仍然在后台运行。
我做了一些测试,服务器收到关闭信号并停止(这需要一些时间,尤其是在服务器未完全启动时)。但是,当我的应用程序已经关闭时,服务器仍在运行时需要时间停止。
双击 CTRL+C 会杀死服务器,但由于第一次按下已经将我带出控制台,我无法双击。
知道如何在停止 ARK 服务器的同时阻止我的应用程序关闭吗?
添加Console.TreatControlCAsInput = true; 将阻止服务器甚至接收信号。
谢谢!
【问题讨论】:
-
我认为依靠 CTRL + C 来安全地关闭程序并不是一个好主意。您应该考虑实施一些措施以正确关闭所有内容。为什么不等用户写“退出”什么的?
-
好吧,因为您按一次 CTRL+C 停止方舟服务器,按两次将其终止。他们就是这样做到的(Avorion 也使用 CTRL+C 停止服务器)。键入“exit”将要求您打开一个 RCON 连接并将其发送到那里。
-
只需在你的程序中实现它,当用户输入“exit”时,调用
serverprocess.Close();然后等待它退出。 CTRL+C 杀死你的程序,所以你不能正确关闭你的子进程。 -
不工作,发布在您的答案下。为什么我不能简单地将 CTRL+C 传递给我的子进程?
标签: c# linux .net-core process debian