Frage

Ich habe keinen Erfolg ein Windows Installer MSI in Modifizieren eine Batch-Datei, nachdem der Primärausgang installiert wurde ausgeführt. Ich habe für diese gesucht und gefunden viele Vorschläge, aber nichts, das funktioniert.

Fügen Sie eine benutzerdefinierte Aktion
Benutzerdefinierte Aktionen können nur ausführbare Dateien sein. Eine Batch-Datei ausführbar ist, nicht.

Erstellen Sie eine Windows Scripting Host ausführbare Datei, die die Batch-Datei ausgeführt
Viele Menschen haben versucht, dies zu tun, auch auf SO , und niemand in der Lage war diese Arbeit zu bekommen.

Verwenden WIX oder Install
Ich habe die Zeit oder die Behörde nicht Unternehmen Installer-Technologie zu ändern.

die .msi mit Orca bearbeiten und eine benutzerdefinierte Eigenschaft hinzufügen, dann eine benutzerdefinierte Aktion, dann die InstallExecuteSequence bearbeiten, ...
Ich habe versucht, diese stundenlang und haben nur Installateure erstellt, die einen Systemfehler werfen, wenn ich sie laufen.
War es hilfreich?

Lösung

Was Sie oben gesagt ist falsch:

  

Benutzerdefinierte Aktionen können nur ausführbare   Dateien. Eine Batch-Datei ist nicht ausführbar.

Benutzerdefinierte Aktionen (auch ohne Werkzeuge wie Install) können .EXE, VBScript, JScript oder DLL basiert. Wenn Sie eine DLL schreiben, können Sie schreiben, was Code, den Sie wollen eine Batch-Datei aufrufen oder Änderungen vornehmen Sie dem System wollen -. Gibt es keine Begrenzung

Aktualisieren : ein Beispiel, das für mich gearbeitet: (Eintrag in Tabelle Custom)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

Andere Tipps

Ich konnte dies lösen, indem ein EXE-Erstellung im wesentlichen bestehend aus:

System.Diagnostics.Process.Start(pathToBatchFile);

Das Hinzufügen der EXE auf die MSI-Datei dann als benutzerdefinierte Aktion ausgeführt wird.

Während die Antwort vorgeschlagen von "William Leara" ein sehr guter Start ist, habe ich eine bessere Lösung gefunden hier erwähnenswert.

Ein weiterer Vorteil dieser Methode hat, ist, dass Sie Ihre Batch-Datei in der Anwendung installieren Ordner speichern können, anstatt root C-Ordner, aber wir verwenden spezielle Flags, die Hinrichtung nach Filecopy Aktion, wir auch aufschieben verwenden noImpersonate höheres Privileg haben, benötigt laufen von Programme

Ein paar Anmerkungen:

  1. Mit TARGETDIR statt INSTALLDIR
  2. Stellen Sie sicher, dass die Pfade zitieren.

Das sind meine zwei benutzerdefinierte Aktionen. In meinem Fall möchte ich zwingen nativer Befehlsprozessor ein paar Registry-Einträge zu beheben so verwende ich nicht COMSPEC .

Die erste Aktion (Typ 50) führt Befehl in Quelle mit Eingabeargumenten von Target, weil Typ ist 50 + 1024 + 2048 bis es aufgeschobene Aktion mit noImpersonate Flagge.

  • Aktion: FinalAction
  • Typ: 3122
  • Quelle: NCOM
  • Ziel: / c "[TARGETDIR] Fixup.bat"

Zweite Aktion definiert NCOM Eigenschaft sofort:

  • Aktion: FinalNativeSys
  • Typ: 51
  • Quelle: NCOM
  • Ziel: [Windows] System32 \ cmd.exe

Dann sollten Sie diese Aktionen in der InstallExecuteSequence :

  • Aktion: FinalAction
  • Bedingung: nicht installiert
  • Sequenz: 5002

Und diese:

  • Aktion: FinalNativeSys
  • Bedingung:
  • Sequence: 5001

Beachten Sie, in meinem Fall, dass ich einfach die Aktionen zu nennen zwicken könnte reg.exe Import Fixup.reg zu. Schließlich kann man mit MSITRAN als hier vorgeschlagene in einem Beitrag Build, das Verfahren zu automatisieren.

Erstellen Sie eine EXE, die eine temporäre BAT-Datei macht das was Verzeichnis ändern Sie wollen und CALL eine andere bat-Datei, das tut, was Sie brauchen.

Bitte geben Sie die benutzerdefinierte Aktion, dass die exe zu verwenden.

Das erste Argument für eine CPP exe ist der Pfad zur exe selbst. Dies kann dazu verwendet werden, um sich zu orientieren, und dass Informationen könnten bei der Herstellung der temporären .bat verwendet werden

In meinem Fall habe ich "Custom Actions".
Ordner "Install" wählen Sie "benutzerdefinierte Aktion hinzufügen"
cmd.exe Wählen Sie (c: \ windows \ system32 \ cmd.exe)
Dann in Eigenschaften von cmd.exe bearbeiten "Argumente" zu
"/ Install / c C: \ MyApp.exe --exec-some-Aktion"

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