Ho un programma di installazione, uno script NSIS compilato e prima controlla se un'altra versione della mia applicazione è in esecuzione sul sistema. Se esiste un'altra istanza, attiva prima la disinstallazione invisibile e procede quindi con l'installazione della nuova versione.Come eseguire un programma di disinstallazione NSIS da un altro programma di installazione NSIS e attendere che termini?
Uso ExecWait per attivare l'unistaller in modalità silenziosa ma il mio processo di installazione principale non attende e procede con il processo di installazione.
Come impongo all'installatore principale di attendere il completamento della disinstallazione invisibile all'utente?
+1: Penso che questo non risponda alla domanda, funziona comunque per le piccole app. Quindi, +1 per soluzione alternativa :-). In realtà, ExecWait non attende ancora la fine del programma di disinstallazione, ma il programma di disinstallazione è ora eseguito silenziosamente (/ S) in background. Se il programma di disinstallazione richiede molto tempo, disinstallerebbe anche i dati attualmente installati. Pertanto, il disinstallazione e l'installazione funzionerebbero in parallelo. Quindi fai attenzione! –
@Valentin: cosa ti fa pensare che ExecWait non aspetti? Attende WaitForSingleObject (hChildProcess, INFINITE); – Anders
+1 Vedere [qui] (http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_new) per come implementarlo su una funzione '. OnInit'. –