У меня есть процесс самообучения, реализованный там, где мое основное приложение exe запускает программу updater exe, передавая дескриптор себе в командной строке. Затем приложение exe вызывает вывод ExitProcess для выхода, и программа обновления вызывает WaitForSingleObject в обработанном дескрипторе, чтобы дождаться завершения EXE-приложения.Когда окна сигнализируют дескриптор процесса?
The WaitForSingleObject ждет. Пока приложение не вызовет ExitProcess, программа обновления останавливается.
Однако иногда, когда программа обновления пытается перезаписать DLL приложения с новыми версиями, я получаю ошибку с блокировкой файлов, которую текущая версия моего обновления рассматривает как неустранимую ошибку и завершается. Похоже, что включение произвольного сна (100) достаточно, чтобы обойти эту «проблему», но я действительно ненавижу такой код. действительно ненавижу.
Мне кажется очень странным, что дескриптор процесса может сигнализироваться, в то время как основное приложение все еще достаточно для блокировки файлов DLL.
Кажется, что - практически - дескриптор процесса становится сигнализируемым, как только существует допустимый код выхода для возврата из GetExitCode(). Но, с точки зрения распространенных случаев, приложения, которые больше всего ждут обработки дескрипторов процесса, являются установщиками/программами обновления, которые должны знать, когда они могут удалять вещи. –