mit Batch Aktion ausführen wenn Programm X und Y (evtl. auch Z) nicht mehr laufen

Guten Morgen,

hab mich hier mal angemeldet, da ich mit einer Sache nicht weiterkomme. Ich möchte für mich eine 7zip SFX Datei erstellen, die den WinRAR Installer ausführt und rarreg.key mitnimmt, damit WinRAR beim Neuaufsetzen von VMs gleich registriert ist.

Momentan hab ich das so gemacht, dass die rarreg.key, der Installer und eine Batch in ein Temp-Verzeichnis entpackt werden. Die 7z SFX ruft dann die Batch Datei auf, die den Installer startet und -da liegt das Problem- wartet bis der fertig ist, um dann das Temp-Verzeichnis zulöschen.

Ganz quick'n'dirty lässt sich das machen, wenn ich einfach folgendes mache:
Code:
winrarivsetup\wrar400d.exe
ping -n 60 localhost > NUL
:clear
echo loesche ...
rd /s /q "%TEMP%\winrarivsetup"
del install.bat
pause >nul
Die Batch wartet dann lange genug, dass man normalerweise den Installer komplett durch hat. Allerdings keine sehr elegante Lösung. Die Alternative sieht so aus:
Code:
rem @echo off
winrarivsetup\wrar400d.exe

:check1
rem cls
ping -n 6 localhost > NUL
TaskList /FI "IMAGENAME eq wrar400d.exe" 2>NUL | Find "wrar400d.exe" >NUL
IF ERRORLEVEL == 1 (
  ECHO NOT Running.
  GOTO check2
  ) ELSE (
    ECHO Running.
    GOTO check1
    )

:check2
rem cls
ping -n 6 localhost > NUL
TaskList /FI "IMAGENAME eq uninstall.exe" 2>NUL | Find "uninstall.exe" >NUL
IF ERRORLEVEL == 1 (
  ECHO NOT Running.
  GOTO clear
  ) ELSE (
    ECHO Running.
    GOTO check1
    )
    
:clear
cls
echo loesche ...
pause >nul
rd /s /q "%TEMP%\winrarivsetup"
del install.bat
pause >nul
Nur leider löscht die Batch dabei schon alles bevor die rarreg.key kopiert wurde. Irgendwie scheint das nicht richtig zu funktionieren. Warum weiß ich allerdings nicht.

Anm.: Die REM, pause und ECHO Befehle sind gesetzt, weil ich dachte, dann zu erfahren, warum er nicht tut, was er soll. Aber Fehlanzeige. Der ping Befehl soll dafür sorgen, dass er nicht ununterbrochen CPU-Last erzeugt, um die lfd. Prozesse zu prüfen.

Wenn ich das richtig sehe, ist die wrar400d.exe der eigentliche Installer, aber danach startet die Uninstall.exe, über die zum einen div. Einstellungen vorgenommen werden können (Dateiverknüpfungen etc.) und die auch autom. die rarreg.key ins Installationsverzeichnis kopiert.

Falls jmd. hier auch eine Idee für ne einfachere/elegantere Lösung ohne Batch hat, bin ich dafür natürlich offen.
 
Visual Studio Express (-> kostenlos) eignet sich perfekt solche kleinen Installer zu bauen, weil es eine geeignete Thread und Prozesskontrolle hat.

Wenn du es dann auf .NET FW 2 "kompilierst" läuft der Setup auf allen Winsystemen ab XP.

Google diesbezüglich einfach mal nach "VB NET system.process" suchen. Dort dürftest du alles finden, was du brauchst. :)

In Batch finde ich solche Sachen immer sehr kompliziert umzusetzen.
Wenn es dir aber reicht, kannst du den Prozess mit "start /wait PROZESS" starten - dann wartet Batch bis zum Ende des Durchlaufs.

lG
 
Hmm, Visual Studio Express werd ich mir heut abend mal ankucken. Habs halt mit Batch versucht, weil ich mich da vor kurzem wg. was anderm etwas reingelesen hatte. Das Problem ist dabei allerdings, dass der "Setupprozess" ja nicht mit Beenden der eigentlichen wrar400d.exe erledigt ist, sondern diese direkt im Anschluss die (dann installierte) Uninstall.exe startet, die die "Einrichtung" (Einstellungen und Kopieren der rarreg.key) durchführt. Sonst wärs ja "zu einfach". *hrhr*

Nachtrag: Da gibt es verschiedene Varianten zum DL, aber keine die genau "Visual Studio Express" heißt. Vllt. dann "Visual C# 2010 Express"?
 
Zuletzt bearbeitet:
Um das ganze Problem in der Batch zu lösen, sollte ein "start /wait" vor den Befehlen, wo bis zum Beenden gewartet werden soll, reichen. Bei externen Programmen ist Windows Batch so hoch intelligent, dass es neue Prozesse abspaltet und einfach weiterläuft...
 
Das mit dem Abspalten versteh ich grad nicht.

Das Programm, welches du startest, wird einfach gestartet und dann sofort, ohne auf Beendigung des vorher gestarteten Programmes zu warten, mit dem nächsten Befehl weitergemacht. Probiere doch einfach mal aus, vor den Aufruf des Setups noch "start /wait" zu machen:

Code:
start /wait winrarivsetup\wrar400d.exe
:clear
echo loesche ...
rd /s /q "%TEMP%\winrarivsetup"
del install.bat
pause >nul
 
Zurück
Oben