GenerateConsoleCtrlEvent не закрывает консольное приложение - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь создать приложение C, которое закрывает другое консольное приложение, посылая ему Control + C, но мой код не всегда работает. Программа, которую я пытаюсь закрыть с помощью Control + C, является процессом игрового сервера. Единственный способ закрыть его - нажать Control + C. Я хочу избежать использования TerminateProcess, потому что программа выполняет некоторую форму кода очистки при нажатии Control + C, и я боюсь, что TerminateProcess повредит файлы своей базы данных. Согласно всем моим исследованиям, GenerateConsoleCtrlEvent - это правильная функция для имитации Control + C, но она не работает.

Вот мой код:

FreeConsole();
if(AttachConsole(dwProcessID))
{
    SetConsoleCtrlHandler(NULL, TRUE);
    if (!GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0))
        return;

    FreeConsole();
    if (WaitForSingleObject(hProcess, 30000) == WAIT_TIMEOUT)
    {
        Log("The process did not terminate on its own.");
    }
}
// output: The process did not terminate on its own.

Выше код работает только частично ... Я знаю это, потому что это заставляет консольное приложение выплевывать информацию об отключении драйверов, но не выполняет полный код очистки и завершения работы. Почему мой код не работает? Кроме того, FreeConsole вызывает исчезновение моей собственной консоли, хотя она все еще работает в фоновом режиме. Есть ли функция, которую я могу вызвать, чтобы получить ее обратно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...