Ausführen von Batch-Dateien:

Antworten
Volker
Beiträge: 39
Registriert: 08.07.2022, 09:25

Ausführen von Batch-Dateien:

Beitrag von Volker »

Der MSI-Installer unterstützt DLL, EXE, VB+J-Skripte. Batch-Dateien (*.bat) lassen sich
dagegen nicht direkt ausführen. Hier muss man einen Umweg gehen.

Doch zu erst sollte man sich einige Fragen beantworten.
  • Wann soll die Aktion stattfinden?
  • Mit welchen Rechten soll die Aktion ausgeführt werden?
  • Woher kommt die Batchdatei?


Im Normalfall soll ein Skript einige Dinge nach der Installation der Dateien tun, und damit es
das z. B. im INSTALLDIR tun kann, mit erhöhten Rechten ausgeführt werden.

Der letzte Punkt ist also, wo bringen wir die Batchdatei unter? Dies kann über Temporäre
Dateien geschehen oder aber, und das ist der einfachste Weg, die Batch wird mit installiert.
Letzteres reicht in den meisten Fällen aus und soll auch in unserem Beispiel genutzt werden
(zur Not kann man die Datei immer noch per Dateiattribute verstecken).

Als Beispiel nehmen wir diese einfache Datei:

Code: Alles auswählen


echo off    
echo A: %1 
echo B: %2
pause
Diese oder eine vergleichbare Datei lässt sich auch gut zum testen benutzen. Ist alles mit
Bedingungen so abgesichert, dass die Aktion nur bei einer Erstinstallation, oder nur bei einer
Reinstallation oder Deinstallation oder nicht bei einem Update ausgeführt wird, kann man die
Datei durch die richtige Datei ersetzen.


Bild

Wählen Sie über das Kontextmenü den Punkte: Beliebige Datei ausführen...

Bild

Wir wählen, wie oben erwähnt, die Datei aus den zu installieren Dateien aus und setzen zwei
Parameter, die wir dem Skript übergeben möchten. Diese Parameter werden Leerzeichen enthalten,
darum betten wir sie in Anführungsstrichen ein. Als letztes setzen wir Auf Beendigung warten.
Letzteres setzt einen entsprechenden Schalter (dazu später).

Bild

Da das Skript mit höheren Rechten ausgeführt werden soll, ist Verzögerte Ausführung und
Systemkontext auszuwählen. Das zweite Auf die Beendigung warten betrifft diese Mal den
Aufruf der Custom Action direkt und eignet sich dazu ggf. einen ReturnCode zurückgeliefert.

Bild

Nach der Übernahme der Daten sieht das Ganze so aus. Unser Parameter steht hinter /cmd und das
erste Auf Beendigung warten setzte den Parameter /wait. Auch sehen wir Verzögerte Ausführung
und Systemkontext. Hier könnten wir uns entscheiden, den Rückgabewert auszuwerten,
belassen es aber bei Ignorieren.

Bild

Kommen wir nun zum Wann wird die Aktion ausgeführt. Wichtig in unserer Aufgabenstellung am
Anfang war, dass die Aktion erst nach dem Installieren der Datei ausgeführt wird, da die
Batch-Datei sonst gar nicht da wäre. Mit der Position 5910 (hinter StartServices) sind wir
auf der sicheren Seite.
:!: Beachten Sie die Bedingung: NOT Installed.

Also nur, wenn das Produkt zum Zeitpunkt der Installation des MSIs noch nicht installiert ist.

Das Produkt wäre nicht installiert, wenn es durch den Bootstrapper oder MPIC Studio im Rahmen der
Deinstallation von vorherigen Versionen deinstalliert würde.
Im Fall von MPIC Studio sollte die Batch-Ausführung besser direkt in das MPIC Studio verlagert werden.

Bild

Wenn wir das MSI nun Erstellen und Ausführen, erhalten wir diese Ausgabe.

Weitere Anwendungsmöglichkeiten währen die Aktion bei der Installation ausführen.
Hierzu wählen wir dies im Assistenten aus bzw. ändern unsere Aktion wie folgt:

Als Bedingung wählen wir (REMOVE~="ALL"), bedeutet, wenn alle Feature entfernt werden.
Als Position wählen wir vor RemoveFile z. B. Sequence-Position 1800 (vor StopServices).
Somit ist die Batch-Datei immer noch vorhanden.
Mit freundlichen Grüßen,
AKApplications, Volker J.
Antworten