Waitforexit hasexited

Waitforexit hasexited

Sybase-iq-binary-option
Sesi forex-trading-live
Indikator trader-dinamis-indeks-dinamis


Kondrla uk forex Online-forex-trading-di-canada 01100-biner-pilihan Michael-freeman-binary-option-channel Forex-trading-system-96-pemenang (2) Terbaik-biner-options-trading-platform-rating

Kode ini terlihat seperti ini: Seperti yang Anda lihat, kode memulai proses cmd.exe dan meneruskannya ke perintah yang ingin saya eksekusi. Saya mengarahkan StandardError dan StandarOutput untuk membacanya dari kode. Kode tersebut membacanya sebelum prosesnya. WaitForExit (Timeout) panggilan seperti yang direkomendasikan oleh Microsoft (lebih lanjut tentang ini nanti). Masalahnya muncul jika perintah yang saya kirim ke cmd.exe tidak pernah berakhir atau hang tanpa batas waktu. Dalam kode saya menggunakan perintah ping -t 8.8.8.8 yang, karena opsi -t, ping host tanpa henti. Apa yang terjadi Proses cmd.exe bersamaan dengan perintah ping-t tidak pernah keluar dan tidak pernah menutup arus stdout sehingga kode kita hang pada output process.StandardOutput.ReadToEnd () line karena tidak berhasil membaca semua arus. Hal yang sama terjadi juga jika perintah dalam file batch hang untuk alasan apapun dan kode diatas bisa bekerja terus menerus selama bertahun-tahun dan kemudian hang tiba-tiba tanpa alasan yang jelas. Sebelum saya menulis bahwa dianjurkan untuk membaca aliran yang dialihkan sebelum prosesnya. WaitForExit (Timeout) panggilan, baik ini terutama benar jika Anda menggunakan tanda tangan WaitForExit tanpa Timeout. Jika Anda menelepon proses. WaitForExit () sebelum membaca aliran yang dialihkan: kode 2: Anda dapat mengalami kebuntuan jika perintah yang Anda lampirkan ke cmd.exe atau proses yang Anda panggil memenuhi keluaran standar atau kesalahan standar. Ini karena code kita tidak bisa mencapai garis Output process. StandardOutput ReadToEnd () Sebenarnya proses anak (perintah ping atau file batch atau proses apa pun yang Anda jalankan) tidak dapat dilanjutkan jika program kami tidak membaca buffer yang terisi dari arus dan cant ini dapat terjadi karena kode tersebut tergantung pada Garis dengan proses WaitForExit () yang akan menunggu selamanya agar proyek anak keluar. Ukuran default kedua stream adalah 4096 byte. Anda dapat menguji dua ukuran ini dengan file batch ini: Skrip pertama menulis 4096 byte ke output standar dan yang kedua untuk kesalahan standar. Simpan salah satu dari ini ke dalam C: testbuffsize.bat dan jalankan proses pemanggilan program kami. WaitForExit () sebelum proses Output. StandardOutput ReadToEnd () seperti pada kode 2. Anda bisa melakukannya dengan menuliskan CommandResult Result ExecuteShellCommandSync (c: testbuffsize.bat, 1000) pada baris 13 kode 1. Kode tidak akan tergantung tetapi jika Anda menulis satu byte lagi di salah satu dari dua aliran itu akan meluap ukuran buffer yang membuat program menggantung. Jika Anda perlu mengalihkan dan membaca standar output atau standar error, solusi terbaik adalah membacanya secara asinkron. Cara terbaik untuk melakukannya diusulkan oleh Mark Byers di thread stackoverflow ini Sebagai hal terakhir, perhatikan bahwa jika proses anak keluar hanya karena Anda menggunakan prosesnya. WaitForExit (Timeout) tanda tangan dan itu benar-benar berjalan di timeout Anda harus membunuh proses cmd.exe dan anak-anak mungkin. Saya telah mengamati bahwa Process.HasExited kadang-kadang kembali benar meskipun proses masih berjalan. Kode saya di bawah memulai proses dengan nama testprogram.exe dan kemudian menunggu untuk keluar. Masalahnya adalah kadang kala saya dilempar kecuali sepertinya HasExited mengembalikan prosesnya sendiri sebenarnya masih hidup di sistem - bagaimana ini bisa dilakukan oleh program saya ke file log sebelum berakhir dan karena itu saya harus benar-benar Yakin bahwa file log ini ada (alias proses telah diakhiri selesai) sebelum membacanya. Terus memeriksa keberadaannya bukanlah pilihan. UPDATE: Saya hanya mencoba menunggu dengan proses.WaitForExit () alih-alih jajak pendapat dan hasilnya sama persis. Tambahan: Kode di atas hanya untuk menunjukkan masalah yang lebih jelas sama. Untuk memperjelas masalah saya adalah TIDAK bahwa saya masih bisa mendapatkan pegangan proses oleh Process.GetProcessesByName (testprogram) setelah mengatur HasExited menjadi true. Masalah sebenarnya adalah bahwa program yang saya jalankan secara eksternal menulis sebuah file - baru sebelum itu berakhir (anggun). Saya menggunakan HasExited untuk memeriksa kapan proses telah selesai dan dengan demikian saya tahu saya dapat membaca file (karena prosesnya keluar), namun tampaknya HasExited mengembalikan true bahkan terkadang ketika program tersebut TIDAK menulis file ke disk belum. Heres contoh kode yang menggambarkan masalah yang tepat: tanya Mar 25 10 at 21:52 johnrl Saya bertanya-tanya apakah semuanya berjalan seperti yang Anda pikir mereka pergi. Saya tidak pernah mengalami masalah dengan mengelola proses seperti ini. Mungkin itu memulai proses anak dan keluar dari masalah utama, atau perubahan pid untuk beberapa alasan, atau dumping dilakukan dalam proses lain karena bekerja dalam pelaporan kesalahan jendela atau. Ada terlalu banyak variabel. Dapatkah Anda menggunakan procmon (sysinternals) untuk mendapatkan lebih banyak informasi tentang proses apa yang melakukan apa dan memeriksa apakah pid39s dalam proses explorer (procexp dari sysinternals) please ndash atlaste 18 Jan 11 at 7:20 11 Jawaban Saya menyadari ini adalah posting lama, tapi di Pencarian saya untuk mengetahui mengapa aplikasi saya menjalankan acara Keluar sebelum aplikasi dibuka, saya menemukan sesuatu yang mungkin bermanfaat bagi orang-orang yang mengalami masalah ini di masa mendatang. Saat sebuah proses dimulai, ditugaskan sebuah PID. Jika User kemudian diminta dengan dialog User Account Control dan memilih Yes, prosesnya akan dimulai ulang dan diberi PID baru. Saya duduk dengan ini selama beberapa jam, mudah-mudahan ini bisa menghemat waktu seseorang. Menjawab 22 Okt 14 at 13:11 Saya akan menyarankan Anda untuk mencoba cara ini: Anyway. Di halaman MSDN dari HasExited Im membaca hightlighted note berikut ini: Bila output standar telah diarahkan ke pengendali event asinkron, mungkin saja pemrosesan keluaran tidak akan selesai saat properti ini kembali benar. Untuk memastikan bahwa penanganan peristiwa asinkron telah selesai, hubungi WaitForExit () overload yang tidak memerlukan parameter sebelum memeriksa HasExited. Itu bisa jadi entah bagaimana terkait dengan masalah Anda saat Anda mengalihkan semuanya. Jawab 15 Jan 13 jam 15:52 Saya tahu, ini adalah posting lama tapi saya bisa membantu seseorang. Kelas Proses terkadang HasExited akan kembali benar jika prosesnya keluar atau jika proses berjalan dengan hak istimewa administrator dan program Anda hanya memiliki hak istimewa pengguna. Jawab Jan 4 15 at 20:56 Jadi untuk penyelidikan lebih lanjut akar permasalahannya, mungkin sebaiknya Anda memeriksa apa yang sebenarnya terjadi dengan menggunakan Process Monitor. Cukup mulai dan sertakan program eksternal dan alat Anda sendiri dan biarkan merekam apa yang terjadi. Di dalam log Anda harus melihat bagaimana alat eksternal menulis ke file output dan bagaimana Anda membuka file itu. Tapi di dalam log ini Anda harus melihat di mana urutan semua akses ini terjadi. Hal pertama yang terlintas dalam pikiran saya adalah kelas Proses tidak berbohong dan prosesnya benar-benar hilang saat menceritakannya. Jadi masalahnya adalah pada saat ini nampaknya file tersebut masih belum tersedia sepenuhnya. Saya rasa ini adalah masalah OS. Karena memegang beberapa bagian file masih dalam cache yang tidak sepenuhnya ditulis ke disk dan alat tersebut telah keluar begitu saja tanpa membungkus pegangan filenya. Dengan pemikiran ini, Anda harus melihat di dalam log bahwa alat eksternal membuat file, keluar dan SETELAH bahwa file akan dilipat (oleh OS mungkin menghapus filter saat Anda menemukan titik ini di dalam log). Jadi, jika asumsi saya benar, akar masalahnya akan menjadi perilaku buruk alat eksternal Anda yang tidak dapat Anda ubah sehingga menyebabkan hanya menunggu sedikit setelah proses keluar dan berharap batas waktu cukup lama untuk mendapatkan file yang dilipat oleh OS (mungkin coba buka file dalam satu lingkaran dengan timeout sampai berhasil). Jawab Jan 16 13 at 12:36 Pertama, apakah Anda yakin testprogram tidak menelurkan proses sendiri dan keluar tanpa menunggu proses itu selesai. Apakah berurusan dengan beberapa jenis kondisi balapan di sini, dan testprogram bisa menjadi signifikan. Id titik kedua ingin dibuat adalah tentang ini - saya harus benar-benar yakin bahwa logfile ini ada. Nah, tidak ada hal seperti itu. Anda dapat membuat cek Anda, dan kemudian file tersebut hilang. Cara yang umum untuk mengatasi hal ini adalah tidak memeriksa, melainkan melakukan apa yang ingin Anda lakukan dengan file tersebut. Silakan membacanya, menangkap pengecualian, coba lagi jika benda itu tampak tidak stabil dan Anda tidak ingin mengubah apapun. Check-and-do fungsional tidak bekerja dengan baik jika Anda memiliki lebih dari satu aktor (thread atau apapun) di sistem. Sekelompok gagasan acak berikut. Sudahkah anda mencoba menggunakan FileSystemWatcher dan tidak tergantung pada proses penyelesaian Apakah akan lebih baik lagi jika anda mencoba membaca file (tidak mengecek apakah ada, tapi malah bertindak) dalam prosesnya. Acara yang dilancarkan itu tidak boleh Apakah sistem sehat ada yang mencurigakan dalam acara tersebut. Log Dapatkah beberapa kebijakan antivirus benar-benar agresif dilibatkan (Cant tell much tanpa melihat semua kode dan melihat ke dalam testprogram.) Menjawab 17 Jan 13 at 21:46 Sebagai permulaan, apakah ada masalah dengan menggunakan Process.WaitForExit daripada polling itu Anyway , Secara teknis mungkin proses keluar dari sudut pandang yang dapat digunakan namun prosesnya tetap berada di sekitar secara singkat saat melakukan hal-hal seperti flush disk cache. Apakah file log sangat besar (atau operasi apa pun yang kinerjanya berat pada disk menulis) dijawab 25 Mar 10 jam 21:56 Ukuran maksimal logfiles maksimal sekitar 1mb. Alasan saya menggunakan polling adalah saya harus bisa membatalkan tugas menunggu setiap saat dan dengan WaitForExit saya diblokir setidaknya sampai batas waktu. Menurut pendapat Anda, memang mungkin program itu bisa menyiramnya ke disk meskipun HasExited kembali benar. Saya merasa aneh bahwa prosesnya tidak sepenuhnya macet dalam daftar proses saat HasExited benar. Ini tidak menyebutkan keadaan khusus dalam dokumentasi sejauh yang saya tahu. Ndash johnrl 25 Mar 10 at 22:03 Ini adalah sesuatu yang pernah saya lihat sebelumnya, tapi tidak untuk ukuran yang kecil. Seperti yang ditunjukkan oleh commenter lain meskipun kelas Proses akan mempertahankan referensi ke prosesnya, Anda mungkin ingin memanggil Dispose pada instance Process setelah memeriksa Exit tapi sebelum Anda mencoba dan menemukannya di daftar proses. Ndash tyranid Mar 26 10 at 3:35 Saya hanya memiliki satu contoh berjalan dan saya mencoba menjaga Windows Task Manager terbuka dan melihat daftar proses (juga memeriksa ID, cocok), dan memang ketika kode saya melempar pengecualian Prosesnya masih dalam daftar. Kadang berhenti hampir seketika saat pengecualian dilempar, lain kali mungkin diperlukan satu atau dua detik untuk menghilang. Saya tidak yakin apakah Task Manager bisa dipercaya (delay mungkin) tapi faktanya adalah kode saya melempar pengecualian - tidak setiap saat tapi sekitar 110 dari berjalan itu tidak. Ndash johnrl 25 Mar 10 at 22:10 Setelah proses.HasExited benar, maka prosesnya telah keluar. Ini sudah mati. Ini mungkin zombie untuk beberapa periode waktu, terutama jika ada pegangan terbuka terhadap objek proses. Fakta bahwa GetProcessByName () terkadang bisa mengembalikan proses itu berarti tidak lain adalah proses zombie. Anda harus mengolah. Tujuan () untuk memastikan pegangan itu dilepaskan. Tapi quottestquot Anda menggunakan GetProcessByName sama sekali bukan hal yang wajar untuk dilakukan. Process.HasExited adalah satu-satunya tes terpercaya yang dapat Anda buat, dan Anda sudah berhasil. Ndash John Knoeller 26 Mar 10 jam 9:01 Kedengarannya masuk akal. Tapi saya tidak mengerti mengapa file yang diprogramkan (yang terjadi sebelum ditutup), tidak ditulis ke disk saat HasExited benar. Bagaimana ini bisa terjadi jika prosesnya adalah zombie (maka seharusnya semuanya memerah ke disk, benar). Membuang objek proses tidak berpengaruh pada program yang dijalankan oleh proses sejauh yang saya tahu jadi bagaimana ini bisa membantu ndash johnrl Mar 26 10 at 13:05 Jika pegangan terbuka terhadap proses, sistem operasi melepaskan memori proses saat Prosesnya telah keluar, namun tetap menyimpan informasi administrasi tentang prosesnya, seperti handle, exit code, dan exit time. Mungkin tidak berhubungan, tapi patut dicatat. Jika hanya masalah 110 dari waktu, dan proses menghilang setelah kedua tetap, tergantung pada penggunaan HasExited Anda, coba tambahkan penundaan lain setelah cek HasExited bekerja, seperti dan lihat apakah masalah berlanjut. Secara pribadi, saya selalu hanya menggunakan event handler Exceed, bukan jenis polling apapun, dan pembungkus kustom sederhana seputar System.Diagnostics. Proses menangani hal-hal seperti keamanan benang, membungkus panggilan ke CloseMainWindow () diikuti oleh WaitForExit (timeout) dan akhirnya Membunuh(). Logging, dan lain-lain, dan tidak pernah menemui masalah. Jawabnya 25 Mar 10 at 22:34 Mungkin masalahnya ada di testprogram Apakah kode ini bagus flushclose dll. Sepertinya saya testprogram menulis file ke disk, file setidaknya harus tersedia (kosong atau tidak) dijawab Apr 29 10 At 8:27 Jika Anda memiliki aplikasi web, dan programproses eksternal Anda menghasilkan file (tulis ke disk) periksa apakah IIS Anda memiliki hak untuk menulis ke folder itu jika tidak pada keamanan properti menambahkan izin untuk pengguna IIS Anda, itulah alasannya Kasus saya, saya menerima proses.HasExited benar, namun file yang dihasilkan dari proses tidak selesai, setelah berjuang untuk sementara saya menambahkan izin penuh ke folder di mana proses menggeliat dan memproses.Refresh () seperti yang diungkapkan Zarathos dari atas dan semuanya Sedang bekerja seperti yang diharapkan. Dijawab 18 Apr 14 at 0:16 Use processname.Refresh () sebelum memeriksa apakah proses telah keluar atau tidak. Refresh () akan menghapus semua informasi yang tersimpan dalam cache yang terkait dengan proses. Menjawab 30 April 15 di 7:44 Saya melihat ini downvoted - wawasan tentang mengapa saya memiliki masalah yang sama dengan OP dan saya hanya mencoba untuk memilah-milah semua jawaban ini. Ndash Kevin Holt 22 Nov 16 at 18:28 Jawaban Anda 2017 Stack Exchange, Inc
Menjalankan bisnis forex gratis
David pegler forex cargo