
Bat - Datei zu einem MSI-Package hinzufügen
Posted 31 January 2006 - 13:34
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.
Posted 31 January 2006 - 19:18
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.

Posted 01 February 2006 - 10:30
Stefan Krüger
InstallSite.org twitter facebook
Posted 01 February 2006 - 13:39
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.
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.
Stefan Krüger
InstallSite.org twitter facebook
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.
Posted 02 February 2006 - 17:20
kann man da auch einstellen, dass er nach dem Installieren dem Nutzer anbietet, einen Systemneustart durchzuführen??
Mfg
H.
Posted 02 February 2006 - 18:02
Zur anderen Farge: ja, mit ScheduleReboot.
Stefan Krüger
InstallSite.org twitter facebook
Posted 02 February 2006 - 18:30
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.
Posted 05 February 2006 - 23:17
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.
Posted 06 February 2006 - 17:33
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.
Stefan Krüger
InstallSite.org twitter facebook
Posted 07 February 2006 - 01:11

Mfg
H.
Posted 10 February 2006 - 17:02
SystemFolder .... Hm....

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.
