Я испытываю самые тяжелые времена, пытаясь заставить это работать, надеясь, что один из вас делал это раньше.
У меня есть консольное приложение C #, которое выполняет дочерний процесс, который наследует его консоль. Я хочу, чтобы ctrl-c, перехваченный внешним приложением, передавался во внутреннее приложение, чтобы у него была возможность красиво завершить работу.
У меня есть очень простой код. Я запускаю процесс, затем опрашиваю его с помощью WaitForExit (10). У меня также зарегистрирован обработчик CancelKeyPress, который устанавливает значение bool в true при его запуске. Цикл опроса также проверяет это, и когда это так, он вызывает GenerateConsoleCtrlEvent () (который я сопоставил через pinvoke).
Я пробовал много комбинаций параметров для GenerateConsoleCtrlEvent (). 0 или 1 для первого параметра и либо 0, либо идентификатор дочернего процесса для второго параметра. Ничто не похоже на работу. Иногда я получаю ложное возвращение и Marshal.GetLastWin32Error () возвращает 0, а иногда я получаю истинное возвращение. Но ни одна из них не заставляет дочернее приложение получить Ctrl-C.
Чтобы быть абсолютно уверенным, я написал тестовое приложение на C # в качестве дочернего приложения, которое распечатывает, что с ним происходит, и проверяет, что ручной ввод ctrl-c при запуске правильно завершает его.
Я бился головой об это пару часов. Кто-нибудь может дать мне несколько советов о том, куда идти с этим?