WINAPI WinMain возвращает 0, но процесс зависает в фоновых процессах Windows

#c #process #winmain

Вопрос:

У нас есть набор модульных тестов для нашего приложения, разделенных на проекты и отдельные исполняемые файлы, которые являются частью нашей системы сборки. Один из исполняемых файлов начал зависать даже после завершения, что означает, что он удерживает некоторые из наших библиотек DLL и не позволяет другим процессам изменять их (подписывать и т. Д.). Когда я отлаживаю exe-файл, я вижу, что он выходит из WINAPI WinMain метода, возвращая 0, затем приложение удаляется из раздела «Приложения» процессов в диспетчере задач и появляется в разделе «Фоновые процессы», а отладчик не закрывается. Я действительно не знаю, с чего начать с этого, но что может привести к зависанию процесса в процессах Windows, даже если функция WinMain успешно вернулась?

Комментарии:

1. Просто потому, что вы вернетесь из WinMain не значит, что весь процесс будет рядом, есть выход-время деструкторы (ввода д Альтор каждого статический экземпляр) WinMain — это даже не первая функция, которая вызывается в главном потоке, это WinMainCRTStartup значение по умолчанию для каждого EXE-файл, который может сделать много инициализации, прежде чем вы введите первую строку кода. Пожалуйста, предоставьте дополнительную информацию, такую как исходный код, какой набор тестов вы используете, версия компилятора и т. Д. Существует так много способов, чтобы что-то подобное произошло…

2. убедитесь, что сообщения Windows обрабатываются этим приложением, если в очереди событий процесса застряли данные, которые могут вызвать проблему.

3. Имеет ли он несколько потоков?

4. В отладчике посмотрите на потоки и посмотрите, что они делают.

5. «отладка exe» звучит не очень хорошо. сначала вам нужно скомпилировать отладочную версию.