C# Остановить процесс, запущенный моим собственным процессом - PullRequest
0 голосов
/ 13 февраля 2020


Я создал панель запуска для своего 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; остановит сервер даже от приема сигнала.

Спасибо вы!

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Вы должны правильно закрыть вашу программу, чтобы она правильно закрыла ваш сервер. Вот вам go:

var serverProcess = Process.Start(new ProcessStartInfo
{
    FileName = Path.GetFileName(serverpath),
    Arguments = launch,
    UseShellExecute = false
});

while (Console.ReadLine() != "exit")
{
    Thread.Sleep(500);
}

serverProcess.Close();
0 голосов
/ 13 февраля 2020

Мой тест в порядке

Process pro c = new Process (); pro c .StartInfo.FileName = "/ bin / bash"; // sh pro c .StartInfo.Arguments = "- c \" "+ command +" && echo 'OK' \ ""; pro c .StartInfo.UseShellExecute = false; pro c .StartInfo.RedirectStandardOutput = true; про c .start ();

...