Saturday 26 August 2017

Proses Waitforexit Redirectstandardoutput C #


Elina: terima kasih atas jawabannya Ada beberapa catatan di bagian bawah dok MSDN ini (msdn. microsoften-uslibraryhellip) yang memperingatkan tentang potensi kebuntuan jika Anda membaca sampai akhir aliran stdout dan stderr yang diarahkan ulang secara bersamaan. Sulit untuk mengetahui apakah solusi Anda rentan terhadap masalah ini. Juga, nampaknya Anda mengirim output prosesststoutstderr kembali sebagai masukan. Mengapa. ) Ndash Matius Piatt 26 Sep 16 at 4:42 Ini adalah solusi berbasis Task Parallel Library (TPL) yang lebih modern, yang dapat diprediksi selama 4.5 dan yang lebih tinggi. Contoh Penggunaan Implementasi dijawab 5 Okt 16 at 10:54 Saya hal ini pendekatan yang sederhana dan lebih baik (kita tidak memerlukan AutoResetEvent): dijawab 14 Jun 12 at 14:29 Benar, tapi seharusnya tidak Anda lakukan. FileName Path quotggsci. exequot quot lt Obeycommand. txtquot untuk menyederhanakan kode Anda juga Atau mungkin sesuatu yang setara dengan perintah quotecho quot Pathmarkggsci. exequot jika Anda benar-benar tidak ingin menggunakan file obeycommand. txt yang terpisah. Ndash Amit Naidu 13 Jun 13 at 22:03 Solusi Anda tidak memerlukan AutoResetEvent tapi polling Anda. Bila Anda melakukan polling daripada menggunakan event (jika tersedia) maka Anda menggunakan CPU tanpa alasan dan itu menunjukkan bahwa Anda adalah programmer yang buruk. Solusi Anda sangat buruk bila dibandingkan dengan yang lain menggunakan AutoResetEvent. (Tapi saya tidak memberi Anda - karena Anda mencoba membantu). Ndash Eric Ouellet Nov 7 14 at 18:38 Saya memiliki masalah yang sama, tapi alasannya berbeda. Namun akan terjadi di bawah Windows 8, tapi tidak di bawah Windows 7. Baris berikut tampaknya telah menyebabkan masalah. Solusinya adalah TIDAK menonaktifkan UseShellExecute. Saya sekarang menerima jendela popup Shell, yang tidak diinginkan, tapi jauh lebih baik daripada program yang menunggu sesuatu yang tidak pasti terjadi. Jadi saya menambahkan pekerjaan berikut-sekitar untuk itu: Sekarang satu-satunya hal yang mengganggu saya adalah mengapa hal ini terjadi di bawah Windows 8 di tempat pertama. Menjawab 13 Jan 15 at 10:35 Saya mencoba membuat sebuah kelas yang bisa memecahkan masalah Anda dengan menggunakan aliran asynchronous, dengan mencatat jawaban Mark Byers, Rob, stevejay. Dengan melakukan itu, saya menyadari bahwa ada bug yang berhubungan dengan arus keluaran proses asinkron yang dibaca. Anda tidak dapat melakukannya: Anda akan menerima System. InvalidOperationException. StandardOut belum dialihkan atau prosesnya belum dimulai. Kemudian Anda harus memulai output asinkron yang dibaca setelah proses dimulai: Melakukannya, membuat kondisi balapan karena arus keluaran dapat menerima data sebelum Anda menyetelnya ke asinkron: Kemudian beberapa orang dapat mengatakan bahwa Anda hanya perlu membaca arus sebelum Anda Atur ke asinkron. Tapi masalah yang sama terjadi. Akan ada kondisi balapan antara membaca sinkron dan mengatur aliran ke mode asinkron. Tidak ada cara untuk mencapai pembacaan asynchronous yang aman dari arus keluaran suatu proses dengan cara yang sebenarnya Proses dan ProsesStartInfo telah dirancang. Sebaiknya Anda menggunakan asynchronous read seperti yang disarankan oleh pengguna lain untuk kasus Anda. Tapi Anda harus sadar bahwa Anda bisa kehilangan beberapa informasi karena kondisi balapan. Saya melihat kegagalan aneh saat menjalankan perintah dari dalam layanan jendela menggunakan Proses. Potongan kode berikut mirip dengan kode yang dimaksud: static static void RunCommandLine (perintah string) Proses proses null mencoba processStartInfo processInfo ProcessStartInfo baru (quotcmd. exequot, quotC quot command) processInfo. CreateNoWindow process. HowWindow process. WindowStyle. Hidden processInfo. UseShellExecute Proses yang salahInfo. RedirectStandardOutput proses sebenarnyaInfo. LoadUserProfile proses sebenarnya proses baru Proses () proses. StartInfo processInfo process. Start () process. EnableRaisingEvents true process. OutputDataReceived new DataReceivedEventHandler (processOutputDataReceived) catch (Exception ex) static void processOutputDataReceived (object sender, DataReceivedEventArgs e) Kode bekerja dengan baik saat diimplementasikan menggunakan jendela konsol namun gagal saat berada di layanan windows. Berikut ini dapat dikesampingkan sebagai hal-hal yang telah saya coba: menjalankan layanan sebagai akun dengan hak istimewa yang lebih besar yang memungkinkan layanan Izinkan untuk berinteraksi dengan jalur penuh pasokan desktop Saya telah menelusuri masalah kembali ke RedirectStandardOutput, bila ada pendekatan untuk mengarahkan keluaran standar Diimplementasikan (saya juga mencoba proses. StandardOutput. ReadToEnd () dan memijah thread yang terpisah dll) perintah (atau lebih tepatnya executable yang dipanggil) gagal. Hampir pasti berkaitan dengan lingkungan layanan jendela (atau kekurangannya) karena menjalankan perintah mentah di jendela cmd, dan di atas di jendela konsol juga bekerja Pertanyaannya adalah apa sebenarnya yang harus saya lakukan untuk mereplikasi konsol. Lingkungan Saya telah membaca berbagai forum dan sepertinya mengarah ke beberapa kode berikut yang tidak dikelola: LogonUserEx () ImpersonateLoggedOnUser () CreateEnvironmentBlock () GetUserProfileDirectory () LoadUserProfile () CreateProcessAsUser () DestroyEnvironmentBlock () UnloadUserProfile () RevertToSelf () Can Ada yang mengonfirmasi ini benar Ada bantuan yang sangat kami hargai. Im berjalan di XP Server2003. Kegagalan adalah kesalahan yang tidak jelas yang spesifik untuk memanggil yang dapat dieksekusi, jadi tidak ada pengecualian yang dilemparkan dan Proses () ada seperti yang diharapkan, namun prosesnya. ExitCode mengindikasikan adanya kegagalan. Karena saya menangkap stdout melalui OutputDataRecieved saya melihat kesalahan yang sebenarnya. Apa yang saya tidak bisa melewati adalah bahwa kode yang memanggil exe bekerja dengan baik ketika dipanggil dari konsol. Jelas apa pun yang coba dilakukan exe, tidak ada cukup izin untuk melakukannya. Atau kurang lingkungan Sabtu, 06 Desember 2008 2:27 Microsoft sedang melakukan survei online untuk memahami pendapat Anda tentang situs Msdn Web. Jika Anda memilih untuk berpartisipasi, survei online akan dipresentasikan kepada Anda saat Anda meninggalkan situs MSDN. Apakah Anda ingin berpartisipasi?

No comments:

Post a Comment