Frage

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

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

War es hilfreich?

Lösung

Nun, nach langem Suchen und Versuch und Irrtum habe ich dieses Problem gelöst. Ich bin mir nicht sicher, ob dies der beste Weg ist, aber es funktioniert.

Hier ist das Szenario: Ich habe eine Anwendung Ich mag würde über ein Visual Studio-Setup-Projekt zu implementieren. Zusätzlich zu meinen Anwendungsdateien, würde Ich mag ein Unterverzeichnis im Zielverzeichnis erstellen, die eine Batch-Datei (.bat) enthält. Ich würde diese Datei wie am Ende des Installationsprozesses ausgeführt werden.

Hier ist was Sie tun:

  1. Erstellen Sie ein Setup-Projekt und konfigurieren, wie Sie normalerweise, darunter das Unterverzeichnis, in dem Sie Ihre Batch-Datei platzieren werden (Sie können es nur Platz im Anwendungsordner direkt, wenn Sie es nicht in einem Unterverzeichnis wollen).
  2. In der "File System" Ansicht (Rechtsklick auf das Projekt in Lösung Explorer-> View-> File System), fügen Sie die Batchdatei möchten Sie ausführen und cmd.exe (C : \ Windows \ System32 \ cmd.exe)
  3. Öffnen Sie die "Custom Actions" Ansicht (Rechtsklick auf das Projekt in Lösung Explorer-> View-> Benutzerdefinierte Aktionen)
  4. Rechtsklick auf „Commit“ und wählen Sie „Benutzerdefinierte Aktion hinzufügen“
  5. Navigieren Sie zu und cmd.exe wählen.
  6. Öffnen Sie das Fenster Eigenschaften für die neu erstellte benutzerdefinierte Aktion.
  7. Löschen / Commit aus der Eigenschaft Argumente.
  8. Geben Sie: /c "[TARGETDIR]subdirectoryname\batchfile.bat" in der Eigenschaft Arguments, wo subdirectoryname durch den Namen Ihres Unterverzeichnisses ersetzt werden soll (wenn Sie die Batch-Datei in einem Unterverzeichnis setzen wie ich ... wenn Sie nicht tun sollte der Wert /c "[TARGETDIR]batchfile.bat" werden) und batchfile.bat sollte der Dateiname Ihrer Batch-Datei sein.

Das ist es. Die Batch-Datei wird nun ausgeführt, sobald der Rest des Installationsvorganges abgeschlossen ist.

Hier ist ein Beispiel aus Gründen der Klarheit:

Meine Batch-Datei: blah.bat
Mein Unterverzeichnis: mydir

Der Wert der Argumente für meine benutzerdefinierte Aktion Targeting würde cmd.exe dann

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

Hoffnung, dass jemand hilft!

Andere Tipps

  1. Sehen Sie sich diesen Artikel an (Artikel ist veraltet), obwohl er in VB.NET enthalten ist, gilt er auch für C#.Der wichtigste Teil ist (in C# übersetzt) ​​das Erstellen einer neuen Klassenbibliothek und das Hinzufügen einer neuen Installer-Klasse mit folgendem Inhalt:Wie im Artikel erwähnt, 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 Installationsprojekt eine Batchdatei hinzu.Erstellen Sie ein Setup-Projekt und konfigurieren Sie es wie gewohnt, einschließlich des Unterverzeichnisses, in dem Sie Ihre Batchdatei ablegen (Sie können sie einfach direkt im Anwendungsordner ablegen, wenn Sie sie nicht in einem Unterverzeichnis haben möchten).

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

  4. Erstellen Sie das Installationsprojekt.

Eine andere Möglichkeit, um das gleiche Ergebnis zu erreichen, wird eine VBS-Datei in benutzerdefinierten Aktionen setzen, das den Korrespondenten .bat-Datei ausgeführt wird. Der folgende Code ist die „RunRegisterComponents.vbs“ Ich in Setup-Anwendung Ordner. Natürlich habe ich [TARGETDIR] als Parameter in Visual Studio Eigenschaftsfenster .vbs.

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)

Das ist, wie ich meine benutzerdefinierten Aktionen gesetzt:

eingeben Bild Beschreibung hier

Ich hoffe, dies kann Ihnen helfen!

Wenn Sie versuchen, eine Batchdatei ausführen, haben relative Pfade während des Installationsprozesses, die sicher scheitern. Das ist, weil die Batch-Datei das Verzeichnis berücksichtigen wird, wo das Installationsprogramm ausgeführt wird, und nicht dort, wo die Dateien installiert wurden. Verwenden Sie Installer-Builder, dass Kopien Batch-Dateien in temporäres Verzeichnis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top