(batch)(exe) compiled batch von cd aus, batch im temp
moin,
suche vernünftigen batch compiler....
nun ja,
jez kommt gleich .. los! sufu oder google...!
ja das hab ich aber schon hinter mir... allerdings stoße ich nur auf batchkompiler die ich alle probiert habe und nicht das tun was ich möchte...
1. ich hätte gerne die batch umgerechnet und nicht nur in die temp geschrieben...
2. ich hätte ich gerne keine werbung.. (auch keine geldausgaben)
3. es sollte das ganze von cd ausgeführt werden können..
4. verschlüsselung der batch
es handelt sich um eine längere batch die dateien von der cd kopiert (auch den ort braucht) und verknüpfungen erstellt
ist daher abhängig vom cd laufwerk (kopiern auf festplatte und dann ausführn is doof...)
hat da jemand ne idee? würd mich freuen, Ph
.. möp, fällt niemandem was ein? wer mich nich versteht solls bitte sagen ich erklärs gern genauer...
suche vernünftigen batch compiler....
nun ja,
jez kommt gleich .. los! sufu oder google...!
ja das hab ich aber schon hinter mir... allerdings stoße ich nur auf batchkompiler die ich alle probiert habe und nicht das tun was ich möchte...
1. ich hätte gerne die batch umgerechnet und nicht nur in die temp geschrieben...
2. ich hätte ich gerne keine werbung.. (auch keine geldausgaben)
3. es sollte das ganze von cd ausgeführt werden können..
4. verschlüsselung der batch
es handelt sich um eine längere batch die dateien von der cd kopiert (auch den ort braucht) und verknüpfungen erstellt
ist daher abhängig vom cd laufwerk (kopiern auf festplatte und dann ausführn is doof...)
hat da jemand ne idee? würd mich freuen, Ph
.. möp, fällt niemandem was ein? wer mich nich versteht solls bitte sagen ich erklärs gern genauer...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 49174
Url: https://administrator.de/contentid/49174
Ausgedruckt am: 13.11.2024 um 08:11 Uhr
11 Kommentare
Neuester Kommentar
Moin Phlegma,
nein, Du hast nichts falsch gemacht...bei diesem speziellen Problem ist das KnowHow des Rest-Forums nicht größer als Deins...
Die so genannten "batch-Compiler", die ich mal irgendwann angetestet habe, laufen alle nach dem von Dir beschriebenen Schema:
"Kompilieren"==:
- Einlesen des Original-Batch-Quellcodes,
- jedes 3. Bit umklappen, damit der Quellcode nicht mehr lesbar ist
- einen *.exe-Stub davorsetzen
"Ausführen"==
- jedes 3. Bit zurückklappen, damit der Quellcode wieder lesbar ist
- den Quellcode wieder als Batchdatei (unter einem generierten Zufallsnamen mit Endung *.bat) im %Temp%-Verzeichnis auspacken
- eine einzige Zusatzzeile davorsetzen, damit wieder auf die Original-Parameter %0...%9 zugegriffen werden kann
- am Endelöschen der Temp-*.bat-Datei.
Mir ist kein "Batch-Compiler" bekannt, der tatsächlich die Befehle der CMD.exe übersetzt in irgendetwas maschinen-näheres oder auch nur die Syntax-Prüfung vorwegnimmt. Es wird eine Kopie des Original-Quellcodes von einer Instanz der CMD.exe (bzw. %comSpec%) abgearbeitet.
Da diese Cmd.exe nur ENTWEDER einzelne, mit CRLF abgeschlossene Zeilen verwursten kann, ODER eben mehrere Zeilen aus einer Datei auslesen...
---> Fazit 1: Es MUSS eine Datei angelegt werden, jedenfalls wenn die kompilierte .Exe auch auf Nicht-NTFS-Dateisystemen laufen soll.
---> Fazit 2: Wenn denn eine Datei angelegt werden muss, kann sie nur (wenn die Jungs und Mädels nicht völlig blond sind) im %TEMP%-Verzeichnis angelegt werden
---> Fazit 3: Wenn diese Kopie im %Temp%-Verzeichnis "wissen" soll, wer/welches Programm sie dahin kopiert hat VOR dem Aufrufen, dann
> dann Chance 1: der aufrufende Prozess war vorher so schlau, sich selbst als Parameter oder Umgebungsvariable "AUFRUFER" zu definieren.
> oder Chance 2: der aufrufende Prozess war wenigstens halbschlau und hat den Namen der ursprünglichen Bat-(Quelldatei) als Parameter übergeben.
Der QuickBFC nutzt Chance 1 NICHT. Der setzt zwar eine Umgebungsvariable %MYFILES%, die auf das genutzte %Temp%-Dir zeigt, aber mehr nicht.
Und Chance 2 schon gar nicht. Der Name der eigentlichen Batch-Quelldatei wird als Parameter 1 übergeben.
Nicht aber der ursprüngliche Pfad.
Somit könntest Du Dich zwar mit einer Hochsprache wie C in den laufenden Prozessen hochhangeln (wo läuft eine Instanz der CMD.exe mit den Eigenschaften "Ist Tochterprozess einer *.exe", die auch schon den Umgebungswert %MyFiles% kennt usw...
Aber mit Batch-Mitteln hast Du keine Chance, zu ermitteln, ob die kompilierte Batchdatei auf einem CDRom-Laufwerk M: oder X: liegt und in welchem Pfad.
Da kannst Du bestenfalls den Umweg gehen, das/die CD-laufwerke zu ermitteln und dort in einem bestimmten Verzeichnis (z.B. \Install) zu prüfen, ob da eine Datei mit dem Namen Pflegma.exe ist oder so.
Wenn der Endanwender aber diese Datei lokal kopiert hat in sein Verzeichnis C:\test unter dem Namen "SchaunWaMa.exe" findest Du die nicht wieder.
Gruß
Biber
nein, Du hast nichts falsch gemacht...bei diesem speziellen Problem ist das KnowHow des Rest-Forums nicht größer als Deins...
Die so genannten "batch-Compiler", die ich mal irgendwann angetestet habe, laufen alle nach dem von Dir beschriebenen Schema:
"Kompilieren"==:
- Einlesen des Original-Batch-Quellcodes,
- jedes 3. Bit umklappen, damit der Quellcode nicht mehr lesbar ist
- einen *.exe-Stub davorsetzen
"Ausführen"==
- jedes 3. Bit zurückklappen, damit der Quellcode wieder lesbar ist
- den Quellcode wieder als Batchdatei (unter einem generierten Zufallsnamen mit Endung *.bat) im %Temp%-Verzeichnis auspacken
- eine einzige Zusatzzeile davorsetzen, damit wieder auf die Original-Parameter %0...%9 zugegriffen werden kann
- am Endelöschen der Temp-*.bat-Datei.
Mir ist kein "Batch-Compiler" bekannt, der tatsächlich die Befehle der CMD.exe übersetzt in irgendetwas maschinen-näheres oder auch nur die Syntax-Prüfung vorwegnimmt. Es wird eine Kopie des Original-Quellcodes von einer Instanz der CMD.exe (bzw. %comSpec%) abgearbeitet.
Da diese Cmd.exe nur ENTWEDER einzelne, mit CRLF abgeschlossene Zeilen verwursten kann, ODER eben mehrere Zeilen aus einer Datei auslesen...
---> Fazit 1: Es MUSS eine Datei angelegt werden, jedenfalls wenn die kompilierte .Exe auch auf Nicht-NTFS-Dateisystemen laufen soll.
---> Fazit 2: Wenn denn eine Datei angelegt werden muss, kann sie nur (wenn die Jungs und Mädels nicht völlig blond sind) im %TEMP%-Verzeichnis angelegt werden
---> Fazit 3: Wenn diese Kopie im %Temp%-Verzeichnis "wissen" soll, wer/welches Programm sie dahin kopiert hat VOR dem Aufrufen, dann
> dann Chance 1: der aufrufende Prozess war vorher so schlau, sich selbst als Parameter oder Umgebungsvariable "AUFRUFER" zu definieren.
> oder Chance 2: der aufrufende Prozess war wenigstens halbschlau und hat den Namen der ursprünglichen Bat-(Quelldatei) als Parameter übergeben.
Der QuickBFC nutzt Chance 1 NICHT. Der setzt zwar eine Umgebungsvariable %MYFILES%, die auf das genutzte %Temp%-Dir zeigt, aber mehr nicht.
Und Chance 2 schon gar nicht. Der Name der eigentlichen Batch-Quelldatei wird als Parameter 1 übergeben.
Nicht aber der ursprüngliche Pfad.
Somit könntest Du Dich zwar mit einer Hochsprache wie C in den laufenden Prozessen hochhangeln (wo läuft eine Instanz der CMD.exe mit den Eigenschaften "Ist Tochterprozess einer *.exe", die auch schon den Umgebungswert %MyFiles% kennt usw...
Aber mit Batch-Mitteln hast Du keine Chance, zu ermitteln, ob die kompilierte Batchdatei auf einem CDRom-Laufwerk M: oder X: liegt und in welchem Pfad.
Da kannst Du bestenfalls den Umweg gehen, das/die CD-laufwerke zu ermitteln und dort in einem bestimmten Verzeichnis (z.B. \Install) zu prüfen, ob da eine Datei mit dem Namen Pflegma.exe ist oder so.
Wenn der Endanwender aber diese Datei lokal kopiert hat in sein Verzeichnis C:\test unter dem Namen "SchaunWaMa.exe" findest Du die nicht wieder.
Gruß
Biber
Moin Phlegma,
der einzige Workaround, der mir einfallen würde, wäre eine "Benachrichtigung" der durch den Batch-Compiler entpackten und aufgerufenen Batchdatei.
Nehmen wir an, drei Programme/Prozesse würden zusammenspielen:
(1) ein Install.bat auf der CD
(2) ein KompilierteBat.exe auf der CD
(3) [temporär] die in der .exe enthaltene Nicht-Sichtbare eigentliche Bat-Datei.
Datei (1) hat die Hauptaufgabe, die .exe (2) in das %temp%-Verzeichnis zu kopieren und aufzurufen.
Vorher kann diese Install.bat auf zwei (oder mehr?) Arten die Informationen bzgl. Aufrufpfad und Laufwerksbuchstaben der CD "über Bande" weiterreichen
a) einen Eintrag in eine Datei im %Temp%-Verzeichnis machen
(Im Batch: Echo Aufrufverzeichnis=%dp0>>%temp%\MyInstallInfos.tmp)
b) einen Eintrag in die Registry machen (geht nur mit Hilfstools wie Reg.exe; müssten mit auf CD sein)
c) Umgebungsvariablen für die nachfolgend aufgerufenen Programme setzen (Geht nur mit Hilfstools wie Setx.exe: Setx Aufrufverzeichnis=%dp0)
Realistisch erscheint mir nur Variante a)
Gruß
Biber
der einzige Workaround, der mir einfallen würde, wäre eine "Benachrichtigung" der durch den Batch-Compiler entpackten und aufgerufenen Batchdatei.
Nehmen wir an, drei Programme/Prozesse würden zusammenspielen:
(1) ein Install.bat auf der CD
(2) ein KompilierteBat.exe auf der CD
(3) [temporär] die in der .exe enthaltene Nicht-Sichtbare eigentliche Bat-Datei.
Datei (1) hat die Hauptaufgabe, die .exe (2) in das %temp%-Verzeichnis zu kopieren und aufzurufen.
Vorher kann diese Install.bat auf zwei (oder mehr?) Arten die Informationen bzgl. Aufrufpfad und Laufwerksbuchstaben der CD "über Bande" weiterreichen
a) einen Eintrag in eine Datei im %Temp%-Verzeichnis machen
(Im Batch: Echo Aufrufverzeichnis=%dp0>>%temp%\MyInstallInfos.tmp)
b) einen Eintrag in die Registry machen (geht nur mit Hilfstools wie Reg.exe; müssten mit auf CD sein)
c) Umgebungsvariablen für die nachfolgend aufgerufenen Programme setzen (Geht nur mit Hilfstools wie Setx.exe: Setx Aufrufverzeichnis=%dp0)
Realistisch erscheint mir nur Variante a)
Gruß
Biber
Nachtrag:
Manchmal hab ich auch ein Brett vorm Kopf... geht viel einfacher.
Angenommen, Du hast auf der CD deine kompilierte Install.exe und im gleichen Verzeichnis eine StartInstall bat mit den Zeilen:
...dann brauchst Du nur in Deiner Quell-Batchdatei für die Install.exe als erste Codezeile nach dem "@echo off & setlocal" die Zeile "Shift" eingeben.
Fertig.
Dann würde sich die erzeugte .Bat-Datei (die im %temp%-Verzeichnis als "CD-Laufwerk\pfad\StartInstall.bat" outen.
Wenn sie stattdessen "MyProggiSetup.bat heißen soll, dann müsste in der StartInstall.bat stehen:
Wenn die Inst-Pfade auf der CD Leerzeichen enthalten sollten, dann
Gruß
Biber
Manchmal hab ich auch ein Brett vorm Kopf... geht viel einfacher.
Angenommen, Du hast auf der CD deine kompilierte Install.exe und im gleichen Verzeichnis eine StartInstall bat mit den Zeilen:
@echo off
%~dpInstall.exe %~dpnx0
...dann brauchst Du nur in Deiner Quell-Batchdatei für die Install.exe als erste Codezeile nach dem "@echo off & setlocal" die Zeile "Shift" eingeben.
Fertig.
Dann würde sich die erzeugte .Bat-Datei (die im %temp%-Verzeichnis als "CD-Laufwerk\pfad\StartInstall.bat" outen.
Wenn sie stattdessen "MyProggiSetup.bat heißen soll, dann müsste in der StartInstall.bat stehen:
@echo off
%~dpInstall.exe %~dpMyProggiSetup.bat
Wenn die Inst-Pfade auf der CD Leerzeichen enthalten sollten, dann
@echo off
"%~dpInstall.exe" "%~dpAnzeigterNameDerBatDatei.bat"
Gruß
Biber
Moin Phlegma,
So schön wie der sympathische Weltmarktführer selbst kann ich es eh nicht erklären.
Grüße
Biber
. was hat es mit %dp0 auf sich?
%dp0 ist natürlich ein Tippfehler. Muss %~dp0 heißen. Dazu gleich mehr.2. was macht das %~dp vor Install.exe?
Löst sich auf zu: Laufwerk:\Pfad\Install.exe, z.B. "M:\Setup\Insatll.exe"3. was macht das %~dpnx0?
(also was genau macht %dp??)
Dazu hilft am besten der Befehl Call /? vom CMD-Prompt aus:(also was genau macht %dp??)
Zusätzlich hat sich die Auflösung von Referenzen auf Argumente in Batchdateien
(%0, %1 etc.) wie folgt geändert:
.....
%~1 - Expandiert %1 und entfernt umschließende
Anführungszeichen (").
%~f1 - Expandiert %1 zu einem vollständigen Dateinamen.
<b> %~d1 - Erzeugt nur den Laufwerkbuchstaben von %1.
%~p1 - Erzeugt nur den Pfad von %1.</b>
%~n1 - Erzeugt nur den Dateinamen von %1.
........
<b>
Diese Parameter können auch miteinander kombiniert werden:
%~dp1 - Erzeugt den Laufwerkbuchstaben und Pfad von %1.</b>
...
So schön wie der sympathische Weltmarktführer selbst kann ich es eh nicht erklären.
Grüße
Biber
Jepp, ich denke, Du hast es gleich....
Was helfen könnte:
Lege Dir kleine Batchdatei an mit der Zeile:
...ich denke, dann wird der Rest auch klar.
Und was den Titel betrifft... wer Fragen im Kontext Batch-Compiler hat, wird das schon finden.
[Vorsichtige Umschreibung für: Mir fällt auch kein schlauerer Titel ein... ]
Grüße
Biber
P.S. Wenn Du irgendwann so weit bist, dass es fliegt: Mach bitte einen grünen Haken dran..
Was helfen könnte:
Lege Dir kleine Batchdatei an mit der Zeile:
::-----------Beispiel.bat
@echo Programmname :[%0] Gestartet in [%~dp0] Nur Name und Ext [%~nx0] Stand vom: [%~t0]
Und was den Titel betrifft... wer Fragen im Kontext Batch-Compiler hat, wird das schon finden.
[Vorsichtige Umschreibung für: Mir fällt auch kein schlauerer Titel ein... ]
Grüße
Biber
P.S. Wenn Du irgendwann so weit bist, dass es fliegt: Mach bitte einen grünen Haken dran..