Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Bat - Datei zu einem MSI-Package hinzufügen


12 replies to this topic

dertaucher

dertaucher
  • Members
  • 7 posts

Posted 31 January 2006 - 13:34

Hallo, ich arbeite mit dem Visual Studio Installer, und möchte nun per "Benutzerdefinierter Aktion" nach dem Ausführen des MSI-Installers-Code automatisch eine *.bat / *.cmd Datei starten lassen. Leider kann man im "Webanwendungsordner" nur *.exe oder *.dll Dateien hinzufügen! Kann man das trotzdem hinkriegen?

Ich hab schon versucht aus der *.bat per "Quick Batch File Compiler" eine *.exe Datei zu erstellen und die einzubinden, aber er bricht immer ab, mit der Fehlermeldung:

"Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein Programm, dass im Rahmen der Installation ausgeführt wurde, wurde nicht erfolgreich abgeschlossen."


Hat da jemand Erfahrung?

Mfg
H.

Cybot

Cybot
  • Full Members
  • 29 posts

Posted 31 January 2006 - 19:18

Hi!

Schreib dir doch eine kleine Exe, die per ShellExecute() dasBatch-File ausführt.
Dem Programmaufruf übergibtst du einfach den Pfad der *.bat/*cmd-Datei fertig. tongue.gif

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 01 February 2006 - 10:30

Un denk daran, entweder 0 als ExitCode zurückzugeben, oder in der Custom Action den Rückgabewert der EXE zu ignorieren. Denn Windows Installer wertet alles ausser 0 als Fehlercode.

dertaucher

dertaucher
  • Members
  • 7 posts

Posted 01 February 2006 - 13:39

Ich hatte bereits versucht, per C# Konsolenapplikation eine *.exe zu compilieren und die als custom action einzubinden. Leider macht der Installer das nicht mit, es wird "nur" das Webverzeichnis installiert, jedoch nicht die Bat aufgerufen (die liegt auch in Inetpub\wwwroot\WebVerz!).
Wenn man die *.exe manuell ausführt funktioniert sie, d.h. führt die Batch Datei aus.

Ich hab unter "benutzerdefinierte Aktionen" bei "Installieren" die 'Primäre Ausgabe von Konsolenapplikation' und die consolenapplikation.exe selber angegeben. Muss man beides angeben, oder reicht das erste eigentlich aus?


Hier der Code meiner Konsolenappli:
__________________________________________________
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static int Main(string[] args)
{
System.Diagnostics.Process.Start("C:\\Inetpub\\wwwroot\\WebVerz\\Make.bat");
return 0;
}
}
}


Wie kann ich denn im Visual Studio Installer in der Custom Action den Rückgabewert der EXE zu ignorieren??

Edited by dertaucher, 02 February 2006 - 00:25.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 02 February 2006 - 14:34

QUOTE
Wie kann ich denn im Visual Studio Installer in der Custom Action den Rückgabewert der EXE zu ignorieren??

Im Visual Studio Installer gibt es dafür keine einstellung. Ich weiss nicht was er standardmäßig macht, aber es sieht so aus als ob der den Rückgabewert auswertet. Du kannst das natürlich mit Orca in der CustomAction Tabelle ändern.

Cybot

Cybot
  • Full Members
  • 29 posts

Posted 02 February 2006 - 17:06

QUOTE (dertaucher @ 2006-02-01 13:39)
Ich hatte bereits versucht, per C# Konsolenapplikation eine *.exe zu compilieren

Und mittels LaunchCondition sollte (falls VS das nicht schon macht) auf .NET getestet werden, sonst dürfe beim fehlen der Installer bei der CA aussteigen. 'Würd das darum eher in Win32 machen.

Edited by Cybot, 02 February 2006 - 17:07.


dertaucher

dertaucher
  • Members
  • 7 posts

Posted 02 February 2006 - 17:20

Hi, okay, hab mal das SDK mit Orca installiert und in der custom action Tabelle nachgeguckt. Aber wo ist da die Einstellung zum Ignorieren des Return Codes?
kann man da auch einstellen, dass er nach dem Installieren dem Nutzer anbietet, einen Systemneustart durchzuführen??

Mfg
H.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 02 February 2006 - 18:02

Ich weiss das Flag auch nicht auswendig. Schau doch bitte in die MSo Doku in der MSDN Hilfe zum Thema CustomAction Table.
Zur anderen Farge: ja, mit ScheduleReboot.

dertaucher

dertaucher
  • Members
  • 7 posts

Posted 02 February 2006 - 18:30

Jupp, ich wusste noch nicht, dass in Orca der Type - Wert darüber entscheidet, was gemacht wird. Ich hab da jetzt 1025 (kann man irgendwo sehen, wie sich dieser Wert zusammensetzt? Der wird ja durch Addition gebildet, z.B.
Custom Action Type 18 (EXE file that is installed with a product.)
+ irgendwas anderes...)

Das für mich relevante Flag wär doch dieses hier, oder?:

msidbCustomActionTypeContinue (+64) A synchronous execution that ignores exit code and continues.


Das würde ja 1089 als Wert ergeben. Wenn ich dann aber den Installer ausführ, wird die Batch nicht ausgeführt, es wird nur folgende Datei erstellt im Install-Ordner:
consoleapplication1.InstallState

Mfg
H.

dertaucher

dertaucher
  • Members
  • 7 posts

Posted 05 February 2006 - 23:17

Hmm, okay, das mit der Konsolenapplikation sollte man lassen. Besser ist es, die zur Make.exe compilierte Batchdatei zu nehmen, diese dann im Dateisystem in VisualStudio dem Installerprojekt hinzuzufügen, und in Orca:

a)Neue CustomAction anlegen (Create a Custom Action (Execute Deferred, Async, NoWait)
Action: Make.exe
Type: 3282
Source: FileKey: _16C1C82765…
Target:

b)Neuen Record erstellen in InstallExecuteSequence
Action: Make.exe
Condition: Wenn mans braucht…
Sequence: Sequencenummer von InstallFinalize – 5 => 6600 => 6595


Leider werden nicht alle Registry-Einträge, die die Batch ausführen soll, eingetragen, und auch das Aufrufen einer anderen Exe-Datei (ein kleines Hilfstool), die in dem installierten Webverzeichnis liegt, wollte er nicht machen...
Keine Ahnung warum, habs mit, sowie auch ohne "User Impersonation" probiert...

Führt er die Make.exe vielleicht nicht in dem Verzeichnis aus, in der sie liegt? Das würde erklären, warum er dies Hilfstool nicht findet.
Aber wie kann man das ändern??

Mfg
H.



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 06 February 2006 - 17:33

Die Werte der einzelnen Flags stehen in der Doku. Hübscher ist es natürlich mit einem entsprechenden Tool (z.B. InstallShield) das diese Einstellungen direkt anzeigt ohne dass man selbst rechnen muss.

WinDows Installer wechselt meines Wissens nicht extra ins Verzeichnis in der die EXE liegt, d.h. das aktuelle Arbeitsverzeichnis kann iregndwo liegen (oft wahrschienlich das Systemverzeichnis weil da msiexec.exe liegt). Deine EXE sollte nach benötigten Dateien also nicht einfach im "Arbeitsverziechnis" suchen (also relative Pfad) sondern explizit in dem Verzeichnis in dem die EXE liegt.

dertaucher

dertaucher
  • Members
  • 7 posts

Posted 07 February 2006 - 01:11

Jupp, danke, hab die Hilfstools in den SystemFolder packen lassen, dann hat er sie auch gefunden wink.gif

Mfg
H.

Cybot

Cybot
  • Full Members
  • 29 posts

Posted 10 February 2006 - 17:02

So am Rande: Bitte nicht falsch verstehen!

SystemFolder .... Hm.... dry.gif ob das da reingehört?
Es mag ja Ansichssache zu sein, eine saubere Installation macht aber meiner Meinung nach immer einen besseren Eindruck, als die Daten irgendwo hinzuschaufeln.

Tipp: Mittels Systemroutine GetModuleFileName() kann man leicht ermitteln, wo eine Exe genau liegt. Knapst man den Filepart ab [_tsplitpath()], kann man mit SetCurrentDirectory() sein Arbeitsverzeichnis setzen und alles ist gut. smile.gif