Wie führe ich eine “.bat” -Datei während der Installation aus?

In einem Setup-Projekt sind die ausführbaren Dateien wie “.exe, .dll, .js, .vbs” akzeptabel, aber es gibt keine Möglichkeit, eine .bat Datei in einer benutzerdefinierten Aktion auszuführen.

Die Frage ist, wie man die *.bat Dateien während der Installation ausführt.

Nun, nach viel Suchen und Versuch und Irrtum habe ich das getriggers. Ich bin mir nicht sicher, ob das der beste Weg ist, aber es funktioniert.

Hier ist das Szenario: Ich habe eine Anwendung, die ich über ein Visual Studio Setup-Projekt bereitstellen möchte. Zusätzlich zu meinen Anwendungsdateien möchte ich ein Unterverzeichnis im Zielverzeichnis erstellen, das eine Batch-Datei (.bat) enthält. Ich möchte, dass diese Datei am Ende des Installationsvorgangs ausgeführt wird.

Hier ist was du tust:

  1. Erstellen Sie ein Setup-Projekt und konfigurieren Sie es wie gewohnt, einschließlich des Unterverzeichnisses, in dem Sie Ihre Batch-Datei ablegen (Sie können es einfach direkt in den Anwendungsordner legen, wenn Sie es nicht in einem Unterverzeichnis haben wollen).
  2. Fügen Sie in der Ansicht “Dateisystem” (klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer-> Ansicht-> Dateisystem) die Batch-Datei, die Sie ausführen möchten, und cmd.exe (C: \ Windows \ System32 \ cmd.exe)
  3. Öffnen Sie die Ansicht “Benutzerdefinierte Aktionen” (klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer-> Ansicht-> Benutzerdefinierte Aktionen)
  4. Klicken Sie mit der rechten Maustaste auf “Commit” und wählen Sie “Benutzerdefinierte Aktion hinzufügen”
  5. Navigieren Sie zu und wählen Sie cmd.exe.
  6. Öffnen Sie das Eigenschaftsfenster für die neu erstellte benutzerdefinierte Aktion.
  7. Löschen / Commit von der Argument-Eigenschaft.
  8. Geben Sie /c "[TARGETDIR]subdirectoryname\batchfile.bat" : /c "[TARGETDIR]subdirectoryname\batchfile.bat" in der Argument-Eigenschaft, wobei Unterverzeichnisname durch den Namen Ihres Unterverzeichnisses ersetzt werden soll (wenn Sie die Batchdatei wie ich in ein Unterverzeichnis schreiben … wenn Sie nicht t, der Wert sollte /c "[TARGETDIR]batchfile.bat" ) und Batchdatei.bat sollte der Dateiname der Batchdatei sein.

Das ist es. Die Batch-Datei wird nun ausgeführt, sobald der restliche Installationsvorgang abgeschlossen ist.

Hier ein Beispiel aus Gründen der Übersichtlichkeit:

Meine Batchdatei: blah.bat
Mein Unterverzeichnis: mydir

Der Wert der Argumente für meine benutzerdefinierte Aktion, die auf cmd.exe abzielt, wäre dann

/c "[TARGETDIR]mydir\blah.bat"

Hoffe das hilft jemandem!

Eine andere Möglichkeit, dasselbe Ergebnis zu erzielen, besteht darin, eine .vbs-Datei in benutzerdefinierte Aktionen einzufügen, in denen die entsprechende .bat-Datei ausgeführt wird. Der folgende Code ist die “RunRegisterComponents.vbs”, die ich in den Setup-Anwendungsordner gelegt habe. Natürlich habe ich [TARGETDIR] als .vbs-Parameter im Visual Studio-Eigenschaftenfenster gesetzt.

 dim WshShell Set WshShell = CreateObject("WScript.Shell") ' Read the "CustomActionData" property holding the install directory. dim programDir programDir= property("CustomActionData") ' Make the batch full file name and parameter commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) & programDir& chr(34) ' Set the current directory WshShell.CurrentDirectory = programDir ' Run batch. ret = WshShell.Run (commandString, 0, 0) 

So stelle ich meine benutzerdefinierten Aktionen ein:

Bildbeschreibung hier eingeben

Ich hoffe, das kann dir helfen!

  1. Überprüfen Sie diesen Artikel (Artikel ist veraltet), obwohl es in VB.NET auch für C # gilt. Der wichtigste Teil ist (in C # übersetzt) ​​das Erstellen einer neuen classnbibliothek und das Hinzufügen einer neuen Installer-class mit folgendem Inhalt: Wie im Artikel angegeben, können Sie dann eine neue benutzerdefinierte Aktion mit einem Verweis auf Ihr gerade erstelltes Projekt erstellen.

     override void Commit(IDictionary savedState) { base.Commit(savedState); System.Diagnostics.Process.Start("myApp.bat","your bat arguments"); } 
  2. Jetzt fügen wir Ihrem Installer-Projekt eine Stapeldatei hinzu. Erstellen Sie ein Setup-Projekt und konfigurieren Sie es wie gewohnt, einschließlich des Unterverzeichnisses, in dem Sie Ihre Batch-Datei ablegen (Sie können es einfach direkt in den Anwendungsordner legen, wenn Sie es nicht in einem Unterverzeichnis haben wollen).

  3. Fügen Sie in der Ansicht “Dateisystem” (klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer-> Ansicht-> Dateisystem) die Stapeldatei, die Sie ausführen möchten, hinzu.

  4. Erstellen Sie das Installationsprojekt.

Wenn Sie versuchen, eine Batch-Datei mit relativen Pfaden während des Installationsprozesses auszuführen, wird dies mit Sicherheit fehlschlagen. Das liegt daran, dass die Stapeldatei das Verzeichnis berücksichtigt, in dem das Installationsprogramm ausgeführt wird, und nicht, wo die Dateien installiert wurden. Verwenden Sie Installer-Builder, die Stapeldateien in ein temporäres Verzeichnis kopieren.