AKInstallerMSI für den Windows® Installer      
Ausführen von Batch-Dateien:
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:
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.

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

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).



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ückzuliefern.



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.



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.



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.