Bir exe'nin toplu iş dosyasında tamamlanmasını nasıl beklersiniz?


43

Sp1'i yüklemek için kapatma sırasında bir exe yürütmek için bir komut dosyası oluşturmaya çalışıyorum. betiğim bir şeylere gider (gerçek yarasa betiği değil).

If installed GOTO END
    Install.exe
END:

Benim sorunum çalıştığı zaman kurucuyu başlatması, ardından betiği bitirmesidir çünkü kurucu farklı bir işlemdir ve kurulum işlemini kapatır. Çünkü bilgisayar sistemi kapatıp kapatır (en azından sanırım budur) yapıyor.)

Başlattığı işlem tamamlanıp kapanana kadar beklemesini söylemenin herhangi bir yolu var mı?

Yanıtlar:


81

Koşmayı dene

START /WAIT Install.exe

Bu cevap ile harika bir iş!
l

Zincir yapabilir misin? like start /wait install; exit?
Serj Sagan

her zaman yapabilirsincmd /C start /wait install
graywolf

Toplu iş dosyasının başlamadığı bir işlemi beklemeniz gerekirse?
Kyle Delaney,

23

Bir kısa yol:

Install.exe|more

Ayrıca

install|rem

Sonunda bazı konsol çıktılarını yakalayabilecek olsanız da, daha sonra da kullanılabilir. İşe yaramasının nedeni de bu - piped komutu .exe bitinceye kadar girdi bekler.


ve neden aşağılık oy?
npocmaka,

Bu mükemmel! Ben sana oy veririm.
Changwang Zhang

2
Bu açıkça kazanır
Fnord

exe parametreleri alırsa ne olacak? bu nasıl işe yarar?
m4l490n

@ m4l490n - Tamam işe yarayacak. Yönlendirme ve koşullu yürütme operatörleri (kesikli alfabelerde yüksek bir önceliğe sahip <, >, >>, &, &&, ||, |)
npocmaka

13

Ya exe'yi doğrudan toplu iş dosyasından çağırmak ya da kullanmak start /waitişe yarayacaktır, ancak bir uyarı vardır.

Eğer çağırdığınız exe, başka bir exe'yi çağırmak gibi başka bir süreç yaratırsa ve ardından çıkan toplu iş dosyasından çıkarsa, çağrılan exe sonlandırıldıktan sonra, onun başlattığı diğer işlemler hakkında hiçbir bilgisi olmadığı için toplu iş dosyasından devam eder.

Sizin durumunuzda bu gerçek bir sorundur çünkü kurucular normalde exe içine gömülü olabilecek bir tür sıkıştırılmış kaptan dosyaları çıkarır, daha sonra çıkarılmış dosyalardan birini çıkarır ve çıkar. Bazı yükleyiciler, orijinal exe'ye tüm kurulum tamamlanıncaya kadar çıkmamasını söyleyen komut satırı parametreleri sağlar, bu yüzden araştırmak isteyebileceğiniz bir şey var. Bunun dışında, sadece toplu iş dosyaları ile bu konuda gerçek bir yolu yoktur ve çözmek için programlı bir çözüm alacaktı.


Msiexec.exe'nin (veya hangi cehennemde olursa olsun) çalışıp çalışmadığını kontrol etmek için her zaman kapatma rutine bir döngü ekleyebilir ve ardından tekrar bekleyip tekrar döngü.
mfinni

@mfinni, sadece sorunları daha da karmaşıklaştırmak için msiexecsık sık diğer süreçleri de durduruyor . :(
John Gardeniers 10:11

1
Aslında, neden hiç ihtiyacın var start /wait? Ben kendim start /waitGUI (bir konsolun karşısındaki) uygulamasını bitirene kadar toplu iş dosyasını engellemenin gerekli olduğuna inanıyordum . Ancak şimdi test ederek toplu iş dosyalarının GUI uygulamaları için bile beklediğini görüyorum. İlgili soruyu gönderdim: Neden GUI uygulaması bir toplu iş dosyasını engelliyor?
Martin Prikryl

Bu sorunu yaşadım, çözümümü bir cevap olarak ekledi.
ÜcretsizYazılımServisler

5

İşte MATLAB kullanarak bir örnek! MATLAB için yol ayarlarının yapıldığını ve MATLAB çıkışının FileName.m dosyası tarafından sağlandığını varsaydım (veya kullanıcı bunu dahili olarak belirledi).

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

2
Matlab’ın bana biraz garip geldiğini farz ediyorum, özellikle burada sunucu hatası.
Erik

Bu MATLAB dışındaki şeyler için işe yarayabilir. Sadece "MATLAB.exe" yi başka bir şeyle değiştirin. Ve belki de filtrelenen çıktıda tekrar exe aramak için bu ikinci 'bul'u düzeltin.
Oliver Bock

1

John Gardeniers problemini yaşadım, tanımlamıştım, exe'm başka bir exe çağırdı ve sona erdi, bunun için başlama / bekleme işe yaramadı. Çalışıp çalışmadığını kontrol etmek için bir "while döngüsü" oluşturdum ve ardından bir kez devam etti. İhtiyaçlarınıza göre zamanlar ayarlanabilir.

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

Başlat / bekle komutunu kullanabilirsiniz. Bu, bir uygulamayı başlatır ve bitmesini bekler.

Veya yürütmenin ne kadar süreceğini biliyorsanız, Windows Server 2003 Kaynak Seti Araçları tarafından sağlanan uyku komutuna bakabilirsiniz . Sleep.exe, toplu iş dosyası başka bir şey yüklemeye devam etmeden önce programın tam olarak yüklenmesine izin vermek için toplu işinizi herhangi bir saniye boyunca duraklatmak için kullanılabilir. Programın başka bir işlemi başlatması nedeniyle "başlat / bekle" sözdizimini yok sayan bazı programlar var, sonra sleep.exe çok kullanışlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.