Tengo un proceso de actualización automática implementado en el cual mi aplicación principal exe ejecuta un exe actualizador pasando un manejador a sí mismo en la línea de comando. El exe de la aplicación llama a ExitProcess para salir y el actualizador llama a WaitForSingleObject en el controlador pasado para esperar a que finalice el exe de la aplicación.¿Cuándo Windows señala un identificador de proceso?
WaitForSingleObject espera. Hasta que la aplicación llame a ExitProcess, el actualizador se detiene.
Sin embargo, a veces, cuando el actualizador intenta sobrescribir los archivos DLL de la aplicación con las nuevas versiones, aparece un error de archivo bloqueado que la versión actual de mi actualizador trata como un error irrecuperable y finaliza. Parece que incluir un sueño arbitrario (100) es suficiente para eludir este "problema", pero realmente odio el código así. realmente odio.
Me parece muy extraño que el identificador del proceso se pueda señalar mientras la aplicación principal todavía está viva lo suficiente como para tener archivos dll bloqueados.
Parece que, prácticamente, el identificador del proceso se señaliza tan pronto como haya un código de salida válido para devolver desde GetExitCode(). Pero, en términos de casos de uso común, las aplicaciones que probablemente esperarán en los identificadores de proceso son los instaladores/actualizadores que necesitan saber cuándo pueden eliminar cosas. –