Waitsesxit Useshellexecute Tidak Menunggu


Saya menambahkan Custom Action ke dalam proyek setup VS2008 saya (MSI installer). Saya memanggil file batch untuk membuat database dan ingin menghapus file-file tersebut setelahnya. Aku punya WaitForExit () tapi tidak akan menunggu. Mengapa tidak ada perbedaan dengan startInfo. UseShellExecute true Batch dijalankan tanpa masalah karena memerlukan input pengguna dan saya memasukkan y dan n untuk pertanyaan. Tapi tindakan hapus itu terjadi sebelum masukan saya. Dan saya memiliki jeda di akhir file batch. Saya bisa melihat proses file batch berlangsung. EDIT: Saya diuji lebih dari 10 kali, itu tidak bekerja. Setelah makan siang, saya menaruh satu lagi waitForExit dan beberapa saat dengan cek HasExited. Itu akan tidur di dalam loop sementara. Aku menemukannya berhasil. Lalu saya menghapus kode tambahan tersebut, kembali ke satu WaitForExit. Sepertinya bekerja sekarang. Tanya 29 Sep 10 17: 18I memiliki situasi di mana saya ingin mengeksekusi sebuah file, dan kemudian menghapus file eksekusi saat eksekusi selesai. Saya menggunakan System. Diagnostics. Process. Start () untuk menjalankan file tersebut, dan menggunakan. WaitForExit () untuk menunggu proses selesai. Saya kemudian menggunakan File. Delete (filename) untuk menghapus file eksekusi. Masalahnya adalah kadang-kadang, File. Delete akan gagal dengan kesalahan berikut: Hal ini membuat saya percaya bahwa, bagaimanapun, prosesnya masih hidup dan mengunci file eksekusi bahkan setelah. WaitForExit () memanggil kembali. Saya telah menemukan benang lain di internet yang menggambarkan perilaku yang sama, namun saya belum menemukan yang menyimpulkan dengan penjelasan atau solusi yang masuk akal untuk masalah ini, selain saran untuk memberi Tidur (n) setelah WaitForExit (). Contoh: Berikut adalah contoh program yang mereproduksi masalah untuk saya. Saya telah menguji pada kedua Windows XP dan Windows 7, dan keduanya akhirnya gagal pada beberapa titik dengan kesalahan yang sama. Perhatikan juga bahwa ss. exe executable adalah aplikasi konsol quotHello Worldquot sederhana sederhana. Dan hasilnya biasanya terlihat seperti (dengan jumlah iterasi yang bervariasi sebelum terjadi kecelakaan): Ada gagasan mengapa ini terjadi, dan jika ada beberapa perbaikan untuk hal ini (selain memasukkan kode tidur) Friday, January 08, 2010 3 : 40 PM Alasannya adalah bahwa meskipun prosesnya selesai, diperlukan beberapa milidetik untuk OS untuk menyelesaikan penghancurannya. Dengan OS multi-tasking-nya, semua mencoba untuk melayani semua orang pada saat bersamaan. Unfortunetely, tidak ada cara untuk mengetahui kapan file tersebut tidak lagi terkunci (presisely). Saat Anda WaitForExit, Anda membuat objek kunci pada objek proses. Objek proses tidak dapat dihancurkan sampai kunci dilepaskan dan Anda tidak dapat menunggu sesuatu yang tidak ada (jenis telur ayam dan telur). Jadi satu-satunya hal yang masuk akal yang bisa Anda lakukan adalah terus berusaha, seperti: Ditandai sebagai jawaban oleh Samuel Stanojevic Jumat, 08 Januari 2010 16:20 Diedit oleh Tergiver Jumat, 08 Januari 2010 16:20 berubah menjadi bool, infinite loop Fix Jumat, 08 Januari 2010 16:15 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?

Comments