Saturday 23 September 2017

Useshellexecute Waitforexit Doesnt Aspettare


Io sono l'aggiunta di azione personalizzata nel mio progetto di installazione VS2008 (installazione MSI). Chiedo un file batch per creare database e si desidera eliminare i file dopo. Ho WaitForExit () ma non aspetterò. Perché nessuna differenza con startInfo. UseShellExecute vero il lotto è stato eseguito senza alcun problema, perché richiede l'input dell'utente e l'ingresso I y e n per le domande. ma che l'azione di eliminazione è accaduto prima del mio ingresso. E ho una pausa alla fine del file batch. Posso guardare il processo del file batch in corso. EDIT: Ho provato più di 10 volte, non ha funzionato. Dopo pranzo, ho messo un altro WaitForExit e un ciclo while con assegno HasExited. si dormirà all'interno del ciclo while. Ho trovato ha funzionato. Poi ho cancellato quelli codice aggiuntivo, di nuovo ad uno WaitForExit. Sembra funzionare ora. chiesto 29 settembre 10 alla 17: 18I hanno una situazione in cui voglio eseguire un file, e quindi eliminare il file eseguibile quando l'esecuzione è fatto. Io uso System. Diagnostics. Process. Start () per eseguire il file, e utilizzare. WaitForExit () per attendere il completamento del processo. Ho quindi utilizzare File. Delete (nome del file) per eliminare il file eseguibile. Il problema è che a volte, File. Delete non riuscirà con il seguente errore: Questo mi porta a credere che, in qualche modo, il processo è ancora in vita e il blocco del file eseguibile anche dopo le. WaitForExit () restituisce chiamata. Ho trovato altri thread sulla rete che descrivono lo stesso comportamento, ma non ho trovato alcun che si concludono con una spiegazione ragionevole o una soluzione al problema, diverso da suggestioni di mettere un sonno (n) dopo il WaitForExit (). Esempi: Ecco un esempio di programma che riproduce il problema per me. Ho testato sia su Windows XP e Windows 7, ed entrambi alla fine non riescono a un certo punto con lo stesso errore. Si noti inoltre che l'eseguibile Ss. exe è una semplice applicazione semplice console quotHello Worldquot. e l'uscita si presenta tipicamente qualcosa di simile (con diverse quantità di iterazioni prima del crollo si verifica): Tutte le idee su perché questo accade, e se c'è qualche correzione di questo (altro che mettere dorme nel codice) Venerdì, 8 gennaio 2010 3 : 40 PM la ragione è che, anche se il processo viene completato, potrebbero essere necessari pochi millisecondi per il sistema operativo per completare distruggerlo. Il suo un multi-tasking OS, dopo tutto, il suo tentativo di servire tutti allo stesso tempo. Unfortunetely, non vi è alcun modo di sapere quando il file non è bloccato (presicely). Quando si WaitForExit, si sta creando un oggetto di blocco per l'oggetto processo. L'oggetto processo non può essere distrutto fino a quando il blocco viene rilasciato e non si può aspettare su qualcosa che doesnt esistere (pollo e uova tipo di problema). Quindi l'unica cosa ragionevole che si può fare è continuare a provare, qualcosa di simile a: Contrassegnato come risposta da Samuel Stanojevic Venerdì 8 gennaio 2010 16:20 A cura di Tergiver Venerdì 8 gennaio 2010 16:20 cambiato in bool, ciclo infinito fix Venerdì 8 Gennaio 2010 16:15 Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione del sito Web MSDN. Se si sceglie di partecipare, il sondaggio on-line sarà presentato a voi quando si lascia il sito Web MSDN. Ti piacerebbe partecipare

No comments:

Post a Comment