2010-07-16 33 views
13

NSIS yükleyicimde çalıştırmam gereken bir toplu iş dosyası var. Tüm dosyalar çıkarıldıktan sonra çalıştırılmalıdır, (sanırım bu açık, aksi halde toplu iş dosyası henüz mevcut değil).NSIS yükleyicisindeki Toplu İş Dosyasını Yürütme

MUI_PAGE_CUSTOMFUNCTION_PRE dosyasını çalıştırmak için bitiş sayfasıyla kullanmayı denedim, ancak komut dosyasının bu bölümüne geldiğinde hemen üstünden atladığı anlaşılıyor. Aşağıda onu nasıl çağırıyorum.

;;Finish Page 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done 
!insertmacro MUI_PAGE_FINISH 

Function Done 
    ExecWait '"$INSTDIR\BatchFile" "$INSTDIR" "$DATA_FOLDER"' 
FunctionEnd 

Yardımlarınız için şimdiden teşekkür ederiz.

GÜNCELLEME

Şimdi kullanarak denedi aşağıdadır:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "$INSTDIR\batch.bat" "$INSTDIR" "$DATA_FOLDER"' 

Bu işe yaramadı, bu yüzden cmd istemi dediğini görmek için/C çıkardı (o popping up, ama hemen kapanış) ve o cmd.exe yürütür gibi görünüyor ama bu, o yürütmenin geri kalanı tamamlamıyor.

GÜNCELLEME # 2

çalışacak şekilde almak benim için açtı çekirdek bilgi burada bulunabilir: katılmıyorum dosyalar .bat Sebebi ne olursa olsun

Windows batch files: .bat vs .cmd?

ExecWait. Sonunda

:

ExecWait '"$INSTDIR\BatchFile.cmd" "$INSTDIR" "$DATA_FOLDER"' 

gayet güzel çalıştı. İşte

SetOutPath $INSTDIR\${APPLICATION_DIR} 
    ExpandEnvStrings $0 %COMSPEC% 
    nsExec::ExecToStack '"C:\path-tobatch-file\commands.bat"' 

NSIS Wiki http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

+0

Çalıştırmayı başardım .bat fi le, yukarıda cmd dosyaları için yayınladığınız gibi. Komut penceresini, ExecWait yerine nsExec :: Exec kullanarak görüntülenmesini de engelleyebilirsiniz. – Ben

cevap

7

Exec [bekleyin] bir bağlantı düzgün gerekenler şunlardır:

+1

bunların hepsini yoksay, ne bulduğuma dair soruya bakın. – Nedloh

5

Bunun Bu sözdizimi çok başarılı

bir exec uzantı kullanarak yapmış alıntı:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "c:\path\to\batch.cmd" "quoted param" normalparam "c:\last param"' 
+2

Sadece biraz açıklığa kavuşturmak için. Batch dosyalarının sadece 'batch_file.bat' yerine komut işlemcisi:' cmd/c batch_file.bat' üzerinden çalıştırılması gerekir. Biri% COMSPEC% 'ten cmd'ye yol alabilir. – atzz

+0

Bu harika çalıştı, ancak, toplu iş dosyası yürütülürken konsolu görüntüleyecek şekilde ayarlamak için bir yolu var mı? Toplu iş dosyası, çok sayıda dosyanın bir kopyasını/kopyasını yapar ve kullanıcının gerçekte olduğu zaman bir şey yapmadığını düşünmesini istemiyorum. – Nedloh

+0

Çıkışı görüntülemek için, sadece bir Exec, Cmd Penceresini görüntüleyecektir: Exec '"$ 0"/C "C: \ Yoldan-batch \ commands.bat"' – DBQ

İlgili konular