Застрял на GenerateConsoleCtrlEvent в C # с консольными приложениями

У меня самое сложное время, чтобы заставить это работать, надеясь, что кто-то из вас делал это раньше.

У меня есть консольное приложение C #, которое выполняет дочерний процесс, который наследует его консоль. Я хочу, чтобы ctrl-c, перехваченный внешним приложением, передавался внутреннему приложению, чтобы у него была возможность красиво завершить работу.

У меня есть очень простой код. Я запускаю процесс, а затем опрашиваю его с помощью WaitForExit (10). У меня также зарегистрирован обработчик CancelKeyPress, который устанавливает значение bool в true при его запуске. Цикл опроса также проверяет это, и когда это правда, он вызывает GenerateConsoleCtrlEvent () (который я отобразил через pinvoke).

Я пробовал много комбинаций параметров для GenerateConsoleCtrlEvent (). 0 или 1 для первого параметра и либо 0, либо идентификатор дочернего процесса для второго параметра. Ничто не похоже на работу. Иногда я получаю ложное возвращение и Marshal.GetLastWin32Error () возвращает 0, а иногда я получаю истинное возвращение. Но ни одна из них не заставляет дочернее приложение получить ctrl-c.

Чтобы быть абсолютно уверенным, я написал тестовое приложение на C # в качестве дочернего приложения, которое распечатывает, что с ним происходит, и проверил, что ручной ввод ctrl-c при запуске правильно завершает работу.

Я бился головой об это пару часов. Кто-нибудь может дать мне несколько советов о том, куда идти с этим?

Ответы на вопрос(3)

Ваш ответ на вопрос