Ho implementato un processo di auto aggiornamento dove il mio exe dell'applicazione principale avvia un programma di aggiornamento che passa un handle a se stesso sulla riga di comando. L'applicazione exe chiama ExitProcess per uscire e il programma di aggiornamento chiama WaitForSingleObject sull'handle passato per attendere la chiusura dell'exe dell'applicazione.Quando Windows invia un segnale al processo?
WaitForSingleObject attende. Fino a quando l'applicazione chiama ExitProcess, il programma di aggiornamento si blocca.
Tuttavia, a volte, quando il programma di aggiornamento tenta di sovrascrivere le dll dell'applicazione con le nuove versioni, viene visualizzato un errore di blocco file che la versione corrente del mio programma di aggiornamento considera un errore irreversibile e termina. Sembra che includere un sonno arbitrario (100) sia sufficiente per aggirare questo "problema" ma odio davvero il codice in questo modo. davvero odio.
Mi sembra molto strano che l'handle del processo possa essere segnalato mentre l'applicazione principale è ancora attiva per avere i file dll bloccati.
Sembra che, in pratica, l'handle del processo venga segnalato non appena esiste un codice di uscita valido per il ritorno da GetExitCode(). Tuttavia, in termini di casi di utilizzo comuni, le app che sono più probabilmente in attesa di handle di processo sono installatori/updaters che devono sapere quando sono in grado di eliminare elementi. –