У меня труднее всего пытаться заставить это работать, надеясь, что один из вас сделал это раньше.Застрял на GenerateConsoleCtrlEvent в C# с консольными приложениями
У меня есть консольное приложение C#, на котором запущен дочерний процесс, который наследует консоль. Я хочу, чтобы ctrl-c, пойманный внешним приложением, передавался во внутреннее приложение, чтобы он мог легко закрыть его.
У меня есть очень простой код. Я запускаю процесс, а затем опросил его с помощью WaitForExit (10). У меня также зарегистрирован обработчик CancelKeyPress, который устанавливает bool в true при его возникновении. Цикл опроса также проверяет это, и когда он прав, он вызывает GenerateConsoleCtrlEvent() (который я сопоставил с помощью pinvoke).
Я пробовал много комбинаций параметров для GenerateConsoleCtrlEvent(). 0 или 1 для первого параметра и либо 0, либо идентификатор дочернего процесса для второго параметра. Ничто не работает. Иногда я получаю ложную обратную связь и Marshal.GetLastWin32Error() возвращает 0, а иногда я возвращаюсь обратно. Но ни одно из них не позволяет дочернему приложению получать ctrl-c.
Чтобы быть абсолютно уверенным, я написал тестовое приложение C# как дочернее приложение, которое выводит на экран то, что происходит с ним, и проверяет, что вручную набирать ctrl-c при запуске делает правильно заставить его выйти.
Я уже несколько часов стучал головой об этом. Может ли кто-нибудь дать мне несколько указаний о том, куда идти?
У меня такая же проблема. GenerateConsoleCtrlEvent, кажется, сломан. Это не влияет на процесс, имеет ли он консольное окно или нет, и запускается ли он с CREATE_NEW_PROCESS_GROUP или нет. Я пробовал все, и, похоже, нет никакого способа очистить консольное приложение, запущенное с Process.Start или CreateProcess, если он не является частью окна консоли вызывающего процесса. – Triynko 2013-04-22 19:12:49