Bagaimana Anda menunggu exe selesai dalam file batch?


43

Saya mencoba membuat skrip untuk mengeksekusi exe saat shutdown untuk menginstal sp1. skrip saya berjalan seperti (bukan skrip kelelawar yang sebenarnya).

If installed GOTO END
    Install.exe
END:

Masalah saya adalah ketika dijalankan, ia memulai penginstal, kemudian menyelesaikan skrip karena proses penginstal berbeda dan menindaklanjuti dengan mematikan proses penginstalan karena komputer mematikan dan mematikan sistem (setidaknya, itulah yang saya pikir sedang dilakukan.)

Apakah ada cara untuk mengatakannya untuk menunggu sampai proses mulai selesai dan kemudian dimatikan?

Jawaban:



23

Satu cara yang lebih pendek:

Install.exe|more

Juga

install|rem

dapat digunakan, meskipun dengan lebih pada akhirnya Anda akan dapat menangkap beberapa output konsol. Dan inilah alasannya - perintah pipa menunggu input sampai .exe selesai


dan mengapa downlvote?
npocmaka

Ini luar biasa! Saya memilih Anda.
Changwang Zhang

2
ini jelas menang
Fnord

bagaimana jika exe mengambil parameter? bagaimana cara kerjanya?
m4l490n

@ m4l490n - ini akan berfungsi ok The redirection dan eksekusi bersyarat operator memiliki prioritas yang lebih tinggi dalam batch script ( <, >, >>, &, &&, ||, |)
npocmaka

13

Entah memanggil exe langsung dari file batch, atau menggunakan start /waitakan bekerja tetapi ada peringatan.

Jika exe yang Anda panggil kemudian membuat proses lain, seperti memanggil exe lain, dan kemudian keluar file batch akan melanjutkan pemrosesan setelah exe yang dipanggil berakhir, karena ia tidak memiliki pengetahuan tentang proses lain yang dimulai olehnya.

Dalam kasus Anda ini adalah masalah nyata karena installer biasanya mengekstrak file dari beberapa bentuk wadah terkompresi, yang mungkin tertanam dalam exe itu sendiri, kemudian jalankan salah satu file yang diekstraksi dan keluar. Beberapa installer menyediakan parameter baris perintah yang memberi tahu exe asli untuk tidak keluar sampai seluruh instalasi selesai, jadi itu sesuatu yang mungkin ingin Anda selidiki. Selain itu, tidak ada jalan nyata dengan file batch saja dan akan mengambil solusi terprogram untuk dipecahkan.


Anda selalu dapat menambahkan loop ke rutinitas shutdown untuk memeriksa untuk melihat apakah msiexec.exe (atau apa pun itu) berjalan dan kemudian menunggu dan loop lagi.
mfinni

@mfinni, hanya untuk memperumit masalah lebih jauh, msiexecseringkali juga memicu proses lainnya. :(
John Gardeniers

1
Sebenarnya, mengapa Anda membutuhkannya start /wait? Saya sendiri percaya itu perlu digunakan start /waituntuk memblokir file batch sampai GUI (sebagai lawan dari konsol) selesai. Tetapi mengujinya sekarang, saya melihat bahwa file batch benar-benar menunggu bahkan untuk aplikasi GUI. Saya telah memposting pertanyaan terkait: Mengapa aplikasi GUI memblokir file batch?
Martin Prikryl

Saya punya masalah ini, menambahkan solusi saya sebagai jawaban.
FreeSoftwareServers

5

Berikut ini adalah contoh menggunakan MATLAB! Saya berasumsi bahwa setup path untuk MATLAB telah selesai dan exit MATLAB sedang dipastikan oleh file FileName.m (atau pengguna telah menentukannya secara internal).

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit

2
Dengan asumsi Matlab agak aneh bagi saya, terutama di serverfault.
Erik

Ini dapat bekerja untuk hal lain selain MATLAB. Ubah saja "MATLAB.exe" menjadi sesuatu yang lain. Dan mungkin perbaiki 'find' kedua untuk mencari exe lagi di output yang difilter.
Oliver Bock

1

Saya punya masalah @John Gardeniers Seandainya atau dijelaskan, di mana exe saya memanggil exe lain dan diakhiri, karena itu mulai / menunggu tidak bekerja. Saya membuat "while loop" untuk memeriksa apakah itu berjalan dan kemudian melanjutkan setelah selesai. Waktu dapat diubah sesuai dengan kebutuhan Anda.

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN

0

Anda dapat menggunakan perintah mulai / tunggu. Ini memulai aplikasi dan menunggu sampai selesai.

Atau jika Anda tahu berapa lama untuk mengeksekusi, Anda dapat melihat pada perintah sleep, yang disediakan oleh Windows Server 2003 Resource Kit Tools . Sleep.exe dapat digunakan untuk menjeda bets Anda selama beberapa detik untuk memungkinkan program untuk menginstal sepenuhnya sebelum file batch dilanjutkan untuk menginstal apa pun. Ada beberapa program yang mengabaikan sintaks "mulai / tunggu", karena program itu sendiri meluncurkan proses lain, maka sleep.exe sangat berguna.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.