3nte92
Goto Top

Ausführbare Installationsdatei aus mehreren Dateien erstellen

Hallo Administratoren!

Ich stehe nach langem mal wieder vor einem kleinen Problem und habe noch keine passende Antwort im Web gefunden bzw. wusste auch nicht wirklich, nach was ich suchen soll.

Folgendes Problem:
Ein Programm wird in Kombination von einigen .exe, .cmd, .reg und .msi-Files installiert. D.h. das CMD-File führt eine .exe aus, welche mit bestimmten Benutzerrechten ein MSI-File mit bestimmten Parametern aufruft und dieses wiederum das letztendliche Programm (.exe) mit den einstellungen in einer .reg installiert. So habe ich mittlerweile die Möglichkeit geschaffen, über einen einzigen klick auf eine .cmd-Datei ein Programm im Hintergrund als Administrator beim Benutzer ohne Rechte, mit entsprechend vorkonfigurierten Einstellungen für das Programm zu installieren. Soweit so gut...

Nun möchte ich jedoch aus diesen Dateien eine einzige ausführbare Datei erstellen, sodass der jeweilige Benutzer ohne Adminrechte einfach diese eine Datei ausführen und somit das Programm installieren kann. Diese Datei soll logischerweise alle bisherigen zur Installation benötigten Dateien beinhalten und lediglich die Funktion der bisherigen .CMD-Datei übernehmen.

Ich hoffe ich konnte dies ein wenig verständlich erklären.

Vielen Dank vorab für eure Antworten!


Mit freundlichen Grüßen,
Toby Müller

Content-Key: 217937

Url: https://administrator.de/contentid/217937

Printed on: April 25, 2024 at 01:04 o'clock

Member: colinardo
colinardo Sep 26, 2013 updated at 14:12:39 (UTC)
Goto Top
Hallo Toby,
dazu kannst du ein selbstrextrahierendes RAR oder ZIP-Archiv hernehmen, sowas erstellen können z.B. die Programme WinRAR oder 7Zip. Diesen kann man mitteilen das sie einen Befehl nach dem extrahieren ausführen und schon im voraus Admin-Rechte anfordern sollen.
In Windows gibt es auch ein kleinen Wizard der solch ein Archiv erstellen kann (c:\windows\system32\IExpress.exe)

Grüße Uwe
Member: 3nte92
3nte92 Sep 26, 2013 at 14:48:40 (UTC)
Goto Top
Hi colinardo,

vielen Dank für die schnelle Antwort.

IExpress ist echt ein schönes Tool, habe es gerade getestet und vorher garnicht gekannt. *schäm*
Leider kann ich hiermit lediglich eine .exe-Datei aufrufen. Dieser .exe muss ich jedoch Parameter mitgeben. Momentan mach ich das über eine CMD-Datei. IExpress gibt mir leider nicht die Möglichkeit, die Parameter mit einzutragen, oder doch? Habe es zumindest nicht hinbekommen. Er startet die .exe immer ohne Parameter.

Am einfachsten wäre es, wenn ich die CMD- oder Batch-Datei mit einer .exe öffnen kann. geht das?

Lg Toby
Member: colinardo
colinardo Sep 26, 2013 updated at 15:19:45 (UTC)
Goto Top
Bei WinRar weiß ich das du auch Parameter mitgeben kannst, wie das bei 7Zip ist kann ich im Moment nicht sagen. Ansonsten gibt es noch Tools die aus einer CMD-Datei eine Exe bauen, diese Dateien werden aber häufig von Virenscannern als verdächtig betrachtet.
Ich selber nutze für solche Fälle AutoIt um mir eine benutzerdefinierte EXE zu bauen... AutoIt ist selbst auch in der Lage zusätzlich benötigte Dateien in die erstellte EXE mit einzupacken.

Grüße Uwe
Member: colinardo
colinardo Sep 26, 2013 updated at 15:30:51 (UTC)
Goto Top
Zitat von @3nte92:
IExpress ist echt ein schönes Tool, habe es gerade getestet und vorher garnicht gekannt. *schäm*
Leider kann ich hiermit lediglich eine .exe-Datei aufrufen. Dieser .exe muss ich jedoch Parameter mitgeben. Momentan mach ich das
über eine CMD-Datei. IExpress gibt mir leider nicht die Möglichkeit, die Parameter mit einzutragen, oder doch? Habe es
zumindest nicht hinbekommen. Er startet die .exe immer ohne Parameter.
also ich habe mit IExpress erfolgreich eine CMD-Datei inklusive Parameter für diese, so starten können:

708f4833be31a2703e4263307392584d
Member: 3nte92
3nte92 Sep 27, 2013 updated at 07:35:42 (UTC)
Goto Top
Bei mir haperts an irgend einer Kleinigkeit.
Ich hab nun herausgefunden, dass ich auch eine .bat mit IExpress ausführen kann und das Programm einfach in die .bat gepackt. Ich versuche mal meinen Vorgang zu erklären:

Das ist meine BATCH-Datei "install.bat":
START programm1.exe -parameter1 -parameter2 "file.job"

Das o.g. programm1.exe führt mit entsprechenden Benutzerdaten und Parametern das programm2.msi aus.
programm2.msi installiert programm3.exe mit Hilfe der Einstellungen, welche in einer settings.reg gespeichert sind.

Alle Dateien liegen in einem Verzeichnis. Führe ich nun die install.bat mit einem Doppelklick aus, wird das Programm ohne Probleme im Hintergrund installiert.
Soweit alles perfekt. Das alles soll nun eine einzige .exe erledigen...

Dazu die Einstellungen in IExpress:

1. Create a new Self Extraction Directive file.
2. Extract files and run an installation command
3. Package title: "Test Install"
4. Confirmation prompt: No prompt
5. License agreement: Do not display a license.
6. Packaged files: Add - install.bat, programm1.exe, file.job, programm2.msi, programm3.exe, settings.reg
7. Install Program to Launch: install.bat
Post Install Command: <none>
8. Show windows: Default
9. Finished message: No message.
10. Packgae Name and Options: Test.exe (Keine Optionen)
11. Configure restart: No restart
12. Save Self Extraction: Don't save.

Mit genau diesem Setup erstelle ich die Test.exe
Führe ich diese anschließend aus, öffnet er mir lediglich ganz kurz ein CMD-Fenster, ansonsten passiert nichts...
Finde einfach nicht heraus, worin der Fehler liegt :/
Member: colinardo
colinardo Sep 27, 2013 updated at 07:37:42 (UTC)
Goto Top
Trag mal bei Punkt 7 folgende Zeile ein:
cmd.exe /K install.bat
damit sich das CMD-Fenster nicht beendet, und bau zusätzlich in das script ein PAUSE am Ende ein um zu sehen was das Problem bei deinem Befehl ist.

Grüße Uwe
Member: 3nte92
3nte92 Sep 27, 2013 at 08:53:00 (UTC)
Goto Top
Folgendes passiert:

C:\Users\<BENUTZER>\AppData\Local\Temp\IXP000.TMP>START programm1.exe -parameter1 -parameter2 "file.job"

C:\Users\<BENUTZER>\AppData\Local\Temp\IXP000.TMP>PAUSE
Drücken Sie eine beliebige Taste . . .


Scheinbar fügt er den BATCH-Befehl nur in die cmd.exe ein, führt diese aber nicht aus?
Member: colinardo
colinardo Sep 27, 2013 updated at 09:17:08 (UTC)
Goto Top
also hier geht's problemlos.
mach es mal mit
START /WAIT /B programm1.exe -parameter1 -parameter2 "file.job"  
und starte die EXE mal mit Administrator-Rechten ...
Member: 3nte92
3nte92 Sep 27, 2013 at 09:48:26 (UTC)
Goto Top
Funktioniert auch nicht.
Aus irgendeinem Grund startet er die programm1.exe mit den entsprechenden Parametern nicht.
Kurz zu Erklärung, was es mit dem programm1.exe auf sich hat:

Ich versuche das MSI-Paket mit Administrator-Rechten unter einem Benutzer ohne Adminrechte auszuführen. Dafür benutze ich das Tool "cpau", welches die Benutzerdaten und die Parameter für das MSI-Paket in einem jobfile.job verschlüsselt speichert.
Über eine install.cmd/.bat möchte ich nun die cpau.exe mit den parametern -dec -file "jobfile.job" ausführen, um das MSI-Paket zu installieren.

Genau hier scheint es wohl ein Problem zu geben.
Vielleicht liegt es irgendwo an der cpau.exe?
Member: colinardo
colinardo Sep 27, 2013 at 10:09:12 (UTC)
Goto Top
Kenn das Tool noch nicht, müsste ich später mal damit testen
aber noch zur Info:
CPAU job-Files sind einfach zu entschlüsseln

Grüße Uwe
Member: 3nte92
3nte92 Sep 27, 2013 updated at 10:51:25 (UTC)
Goto Top
Im Endeffekt soll nur der Kunde das Passwort nicht wissen. Grundsätzlich kann man damit jedoch nicht viel anfangen. Glaube auch kaum, dass der Kunde in der Lage ist, das zu entschlüsseln. Zudem wäre das jobfile dann ja auch zusätzlich in der .exe mit verpackt und nur kurzzeitig im TEMP-Ordner zu finden.

Falls ihr eine andere Möglichkeit habt, das MSI-Paket als Administrator auszuführen, würde das auch gehen.

Ich habe grad folgende Idee gehabt, weis aber nicht wie ich sie umsetzen soll:
Ich habe versucht über cpau einfach die cmd.exe als Admin zu starten (über ein mit IExpress erstelltes Package)
Dies hat ohne Probleme funktioniert. Nun müsste ich nur anschließend in dem schon geöffneten CMD-Fenster den Befehl zum ausführen des MSI-Pakets eingeben.
Würde das funktionieren? Wenn ja wie? Kann ich in einer .BAT oder .CMD sagen, dass er das bereits geöffnete Fenster nehmen soll o.ä. ?
Member: colinardo
colinardo Sep 27, 2013 updated at 11:53:21 (UTC)
Goto Top
Denke das Problem liegt an CPAU. Habe gerade mal die Ausgabe von CPAU beim encodieren eines Jobfile gecheckt :
This will not be an interactive authentication. This means
that the credentials are only valid for connecting to remote
resources, locally you will have the credentials CPAU was
launched with. If you need the specified credentials to work
on the local machine you need to use -LWP or -LWOP options.
D.h. die Credentials die du CPAU mitgibst kann es nur für Remote-Verbindungen benutzen und nicht lokal, damit dies geht musst du beim Aufruf die Option -LWOP oder LWP verwenden.

install.bat
Befehl in der Batch-Datei
cpau.exe -dec -file "jobfile.job" -LWOP
Ich hoffe du hast beim encodieren keinen Pfad zu der MSI-Datei hinterlegt. So sollte es aussehen
cpau -u USER -p PASS -ex "msiexec.exe /i MSIFILE.msi" -enc -file "jobfile.job"  

Im iExpress Wizard stellst du dann an Position 7 folgende Befehlszeile ein:
cmd.exe /c install.bat
und dann noch an Position 10 die Option "Lange Dateinamen" auswählen.

So hat es bei meinen Tests einwandfrei funktioniert ...

Grüße Uwe
Member: 3nte92
3nte92 Sep 27, 2013 at 11:05:01 (UTC)
Goto Top
Okay,
werde das gleich nochmal testen.

Habe jedoch bei der msiexec noch mehrere Parameter dazu gegeben. Sodass siq zb. /passive und /quiet installiert.
Member: 3nte92
3nte92 Sep 27, 2013 at 11:51:09 (UTC)
Goto Top
Hab das nun so eingefügt, wie du oben beschrieben hast. Funktioniert jedoch immer noch nicht. Er möchte die MSI einfach nicht ausführen...

Hier mein Code der jobfile.job
cpau.exe -u AdminBD -p admin4backdoor -ex "msiexec /quiet /passive /norestart /qn+ /package MSIFILE.msi"
Member: 3nte92
3nte92 Sep 27, 2013 at 13:35:37 (UTC)
Goto Top
So ich habe es hinbekommen...

Folgende Lösung:
Habe nun aus dem MSI-File, dem dazugehörigen Programm und der REG-Datei mit IExpress die erste install1.exe erstellt.
Anschließend mithilfe der CPAU.exe, dem jobfile und der BAT eine zweite install2.exe, in der ich die install1.exe über die CPAU aufrufe.

So steht in der install1.exe als Command nur der Aufruf vom MSI-Paket und in der zweiten die install.bat, welche den Aufruf der CPAU + dem jobfile erledigt.
Das jobfile enthält die Daten des Benutzers und der install1.exe.

Nun habe ich endlich eine .exe, die die gewünschte Installation durchführt.


Vielen Dank für die Mühe!