C # Processo Redirectstandardoutput Waitforexit


Ive ha guardato su diversi thread su questo, ma tutti loro utilizza il Process. RedirectStandardOutput vero, che io non. Nel tentativo di aprire un processo (applicazione console, non fatta da me) per rendere più compilare un file. acs speciali a un file. o. La struttura è semplice, l'unico argomento è il file che si desidera compilare. Ma su alcuni file mia applicazione si blocca quando si tenta di aprire il processo. Ecco il mio codice: Per iniziare il processo che uso più o meno lo stesso codice che un altro ragazzo ha fatto in C. E il suo codice è perfettamente funzionante. Spero che la giornata è stata meglio di ieri, ma che il suo peggio di domani. Si prega di contrassegnare come risposta se ho risolto il problema. ) A cura da Visual Vincent Sabato 3 gennaio 2015 14:57 Avete confrontato i nomi dei file e argomenti di quelli che lavorano e quelli che dont C'è qualche differenza in loro come quelli che il lavoro non contengono spazi vuoti nel nome del file o argomenti e quelli che funzionano dont contenere spazi vuoti nel loro Se si scopre che per essere il problema allora è necessario aggiungere le virgolette per l'inizio e la fine del nome del file o argomenti. La mia prima risposta è Argomenti necessita delle virgolette in questo modo perché, vedo spazi vuoti nel vostro esempio degli argomenti. ps. Arguments Chr (34) amp savepath amp Chr (34) Se si dice che cant essere fatto, allora malato provarlo cura di IronRazerz Sabato 3 gennaio 2015 15:51 Contrassegnato come risposta da Visual Vincent Sabato 3 gennaio 2015 16:33 Sabato 3 gennaio 2015 15:41 Tutte le risposte avete confrontato i nomi dei file e argomenti di quelli che lavorano e quelli che dont c'è qualche differenza in loro come quelli che lavorano non contengono spazi vuoti nel nome del file o argomenti e quelli che funzionano dont contenere spazi vuoti nel loro Se si scopre che per essere il problema allora è necessario aggiungere le virgolette per l'inizio e la fine del nome del file o argomenti. La mia prima risposta è Argomenti necessita delle virgolette in questo modo perché, vedo spazi vuoti nel vostro esempio degli argomenti. ps. Arguments Chr (34) amp savepath amp Chr (34) Se si dice che cant essere fatto, allora malato provarlo cura di IronRazerz Sabato 3 gennaio 2015 15:51 Contrassegnato come risposta da Visual Vincent Sabato 3 gennaio 2015 16:33 Sabato 3 gennaio 2015 15:41 hai provato manualmente lo stesso comando in una finestra di console Forse si ferma e aspetta qualcosa. O non impostare CreateNoWindow. ErrorDialog e WindowStyle e vedere cosa succede. A cura di Viorel MVP Sabato 3 gennaio 2015 16:27 Sabato 3 gennaio 2015 16:25 Avete confrontato i nomi dei file e argomenti di quelli che lavorano e quelli che dont C'è qualche differenza in loro come quelli che il lavoro non contengono spazi vuoti nel nome del file o argomenti e quelli che funzionano dont contenere spazi vuoti nel loro Se si scopre che per essere il problema allora è necessario aggiungere le virgolette per l'inizio e la fine del nome del file o argomenti. La mia prima risposta è Argomenti necessita delle virgolette in questo modo perché, vedo spazi vuoti nel vostro esempio degli argomenti. ps. Arguments Chr (34) amp savepath amp Chr (34) Se si dice che cant essere fatto, allora malato provare questo in realtà ha fatto. Avevo dimenticato che spazi vuoti rende un argomento nuovo, sciocco me. Io non uso argomenti processo che spesso. ) Spero che la giornata è stata meglio di ieri, ma che il suo peggio di domani. Si prega di contrassegnare come risposta se ho risolto il problema. ) A cura da Visual Vincent Sabato 3 gennaio 2015 04:33 PMElina: Grazie per la risposta. Ci sono alcune note in fondo questo documento MSDN (msdn. microsoften-uslibraryhellip) che mettere in guardia sui potenziali deadlock se si legge alla fine di entrambi stdout e stderr ruscelli sincrono. It39s difficile dire se la soluzione è suscettibile di questo problema. Inoltre, sembra che si sta inviando l'uscita stdoutstderr processo39 terzino destro come input. Perché. ) Ndash Matthew Piatt 26 settembre 16 a 4:42 Questa è una awaitable più moderno, Task Parallel Library (TPL) soluzione basata per 4.5 e superiori. Esempio di utilizzo Attuazione risposto 5 16 ottobre alle 10:54 ho cosa che questo è semplice e l'approccio migliore (Non abbiamo bisogno AutoResetEvent): risposto 14 Giugno 12 in 14:29 Vero, ma shouldn39t essere fai. FileName Percorso quotggsci. exequot quot lt obeycommand. txtquot per semplificare il codice troppo O forse qualcosa di equivalente a quotecho comando quot Percorso quotggsci. exequot se davvero don39t desidera utilizzare un file obeycommand. txt separato. ndash Amit Naidu 4 giugno 13 alle 22:03 La soluzione non ha bisogno AutoResetEvent ma sondaggio. Quando si esegue sondaggio invece di utilizzare evento (quando sono disponibili), quindi si utilizza CPU senza motivo e che indica che sei un programmatore male. La soluzione è davvero male se confrontato con l'altro utilizzando AutoResetEvent. (Ma io non do -1 perché si è tentato di aiutare). ndash Eric Ouellet 7 novembre 14 a 18:38 mi stava avendo lo stesso problema, ma il motivo era diverso. Sarebbe tuttavia accadere in Windows 8, ma non sotto Windows 7. La seguente riga sembra aver causato il problema. La soluzione era quella di non disabilitare UseShellExecute. Ho ricevuto ora una finestra di popup Shell, che è indesiderato, ma molto meglio rispetto al programma in attesa di nulla di particolare per accadere. Così ho aggiunto il seguente work-around per questo: Ora l'unica cosa che mi dà fastidio è il motivo per cui questo accade in Windows 8, in primo luogo. risposto 13 Gennaio 15 alla 10:35 Ho provato a fare una classe che avrebbe risolto il problema utilizzando asincrono flusso di lettura, prendendo in considerazione Mark Byers, Rob, risposte stevejay. In questo modo mi sono reso conto che c'è un bug relativo al processo asincrono flusso di output di lettura. Non puoi farlo: Riceverete System. InvalidOperationException. StandardOut non è stato reindirizzato o il hasnt processo avviato ancora. Poi si deve avviare l'uscita asincrono leggere dopo il processo è iniziato: In questo modo, fare una condizione di competizione, perché il flusso di uscita in grado di ricevere i dati prima di impostare a asincrona: Poi alcune persone potrebbero dire che basta leggere il flusso prima di impostarlo asincrona. Ma lo stesso problema si verifica. Ci sarà una condizione di competizione tra il sincrono letto e impostato il flusso in modalità asincrona. Non vi è alcun modo per acheive sicura lettura asincrono di un flusso di output di un processo nel processo reale strada e ProcessStartInfo è stato progettato. Probabilmente si sta meglio utilizzando lettura asincrono come suggerito da altri utenti per il vostro caso. Ma si deve essere consapevoli che si potrebbe perdere un po 'di informazioni a causa di condizioni di gara.

Comments

Popular Posts