Правильное закрытие приложения: альтернатива TerminateProcess

У меня проблема с TerminateProcess () функция.
В настоящее время я пишу приложение JobScheduler, которое планирует и запускает работу в определенное время.
Для этого я использую CreateProcess () выполнить мой JobLauncher.

Затем процесс JobLauncher запускает консольную программу (используя createprocess), которая эффективно выполняет исполняемый файл задания, ожидает его завершения и отслеживает продолжительность, время пользователя и ядра и т.д.

Чтобы убить работу из JobScheduler, я сначала начал использовать TerminateProcess (), но он не позволяет мне правильно закрыть исполняемый файл. Я имею в виду, я не нашел способа перехватить любое событие завершения.

Пока я не найду лучший способ, чем жестокий TerminateProcess (), Я написал промежуточное решение, используя GenerateConsoleCtrlEvent () в вызывающей программе.

В приложении задания, которое запускает исполняемый файл целевого задания, я установил обработчик, используя SetConsoleCtrlHandler ().
А в обработчике я могу прекратить процесс работы и правильно уведомить своих третьих сторон.
Это лучшее решение, которое я нашел на данный момент.

Есть ли лучший способ программно и правильно закрыть процесс?
Считаете ли вы это решение совершенно абсурдным?
Я не специалист по разработке системного уровня, хотя …

З.

1

Решение

Это хорошо известная проблема консоли Windows, и вы можете найти некоторые решения Вот.

Мы использовали на внутренней консоли утилиту, которая имеет название «Kamikaze». Работало как описано Вот и для меня это лучшее решение, потому что нет проблем с портированием между версиями Windows и архитектурами Windows (x86, x64).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]