phlegma
Goto Top

(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...

Content-ID: 49174

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

Phlegma
Phlegma 19.01.2007 um 15:20:47 Uhr
Goto Top
okok,... eigene idee:
aber zuerst:
ich habe meine batch, die habe ich mit diesem kompiler in eine exe verwandelt damit niemand meinen quellcode lesen kann... http://www.f2ko.de/b2e.html

nun habe ich das teil mit den dateien die ich mit der batch kopiere auf eine cd gebrannt (inkl autorun usw...)

ok nur das problem: die exe startet nicht von cd aus...
an der exe selbst liegt es nich denn auf dem desktop lässt sie sich normal ausführen...

also:
ich brauch jez ne batch die
1) den pfad wo sie ausgeführt wird speichert ( cd laufwerk)
2) die install.exe in die %temp% kopiert
3) die install exe ausführt und den pfad von 1) an die batch die durch die exe gestartet(erstellt) wird weitergibt.

das müsste doch machbar sein..?!
allerdings weiß ich nich wirklich wie!
bitte um hilfe, Ph
Phlegma
Phlegma 21.01.2007 um 17:40:19 Uhr
Goto Top
... danke für die zahlreichen antworten...

was hab ich falsch gemacht? oder wisst ihr nur auch nicht?

Biber
Biber 21.01.2007 um 20:36:16 Uhr
Goto Top
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
Phlegma
Phlegma 21.01.2007 um 22:10:50 Uhr
Goto Top
vielen dank biber!
das is eine erklärung wie man sie sich nur wünschen kann!!

leider löst sie noch nicht mein problem...

könnte ich nicht eine batch direkt vom ort (cd laufwerk zB) aus starten die das verzeichnis in dem sie gestartet wird speichert? gibts da nich sowas wie pushd?

dann könnte ich meine verschlüsselte batch derweil in den tempordner kopieren, sie dort ausführen (von cd geht ja nich)(,sie entpackt und startet) und die entstandene batchdatei per call aufrufen, sodass ich diesen befehl (pushd?) weitergeben kann.

weiß nich wie das gehn soll... face-sad

(zudem kam ich noch nich dazu das mit dem wertspeichern rauszubekommen... aber ich denke das is das kleinste problem..)

also für den anfang bräuchte ich einen batchbefehl der das verzeichnis, indem die batch startet als variable setzt...

ansonsten bleibt nurnoch bibers lösung... allerdings müsste ich dann dafür wisse nwie das geht...

wär super wenn derjenige dem hierzu was einfällt seine ideen posten würde!
gruß, Ph
Biber
Biber 21.01.2007 um 22:56:24 Uhr
Goto Top
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
Biber
Biber 22.01.2007 um 07:50:45 Uhr
Goto Top
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:
@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
Phlegma
Phlegma 22.01.2007 um 12:39:19 Uhr
Goto Top
wow, hört sich gut an!
allerdings tun sich da für mich als anfänger einige fragen auf:
1. was hat es mit %dp0 auf sich?
2. was macht das %~dp vor Install.exe?
3. was macht das %~dpnx0?
(also was genau macht %dp??)

wenn ich das richtig verstehe enthält das %dp oder %~dp einen pfad, sehr praktisch!
den befehl shift habe ich verstanden, blicke aber noch nicht ganz durch..

wär sehr nett von dir wenn du das nochmal genauer für mich zum mitschreiben erläutern würdest! in jedem fall vielen dank!

Gruß, Ph
Biber
Biber 22.01.2007 um 13:20:10 Uhr
Goto Top
Moin Phlegma,

. 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:
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
Phlegma
Phlegma 22.01.2007 um 13:34:41 Uhr
Goto Top
...danke...

das wird ne weile dauern bis ich das verstanden habe.. melde mich dann zurück...

EDIT: ...oder...*mom*...
also %0 wird erweitert dh install.bat wird zu *pfad*\install.bat
und dadurch findet die ausführung in *pfad* statt? wie ein cd nach *pfad*?

und PS: hast du ne idee für nen passenderen titel für dieses thema?
nur falls auch mal jemand ein ähnliches problem hat das er das hier findet..

Gruß, Ph
Biber
Biber 22.01.2007 um 14:10:24 Uhr
Goto Top
Jepp, ich denke, Du hast es gleich....

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]
...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... face-wink ]

Grüße
Biber

P.S. Wenn Du irgendwann so weit bist, dass es fliegt: Mach bitte einen grünen Haken dran..
Phlegma
Phlegma 22.01.2007 um 16:15:11 Uhr
Goto Top
tatsächlich, ich hätte nich gedacht das man auf diese weise den ort an dem der befehl ausgeführt wird ändern kann. was ich getestet habe:
::=========start.bat
@echo off
copy test.bat %temp% /y
start %temp%\test.bat %~dpnx0
::=========test.bat
@echo off
shift
dir
pause >nul
nun und was kommt raus? dir vom verzeichnis wo die start.bat lag!!
sehr schön! vielen dank biber!


wo wir doch so schön dabei sind...
wie sorge ich dafür dass die temp dateien (install.exe,install.bat und B2E.temp), die ich erzeuge immer gelöscht werden (abschluss der installation und bei abbruch per X button), denn bisher werden diese nicht gelöscht auch nicht beim abschluss der installation..
kann ich sie vielleicht sogar löschen noch während sie laufen?

freue mich schon auf eure hilfe (biber du musst das nich alles allein schaffen! face-smile)!!
das soll dich natürlich auch nich davon abhalten etwas zu schreiben wenn du as weißt .. ich denk ich mach nochmal n neues thema auf...
gelöst fürs erste!
gruß, ph