Datei Binder/Joiner
Hallöchen Community,
suche eine möglichkeit oder sogar vielleicht ein sourcecode (example) 2 Dateien ineinander zu verschmelzen (binden) . Habe mich schoneinmal umgesehen , es gab das Thema schoneinmal . Es soll kein Trojaner werden ! Vielen Dank im Vorraus Grüsse CC :wink: :bounce1: |
Re: Datei Binder/Joiner
Stub.dpr
Delphi-Quellcode:
Binder:
{A very Lite stub for extraction and execution of multiple files.
Author: TM } program Stub; uses Windows, ShellApi; function EnumNamesFunc(hModule:THANDLE; lpType, lpName:PChar; lParam:DWORD):BOOL; stdcall; var Info, FH, BW:DWORD; begin Result:= True; Info:= FindResource(0, lpName, lpType); FH:= CreateFile(PChar('C:\'+lpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil); CloseHandle(FH); ShellExecute(0, 'OPEN', PChar('C:\'+lpName), '', '', 0); end; begin EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0); end.
Delphi-Quellcode:
{Ex Binder v0.1
Just an example of using Resources to bind multiple files into a single executable. Author: TM } unit untMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TfrmMain = class(TForm) BtnOpen1: TButton; Bevel1: TBevel; BtnBuild: TButton; OD: TOpenDialog; LstFile: TListBox; procedure BtnOpen1Click(Sender: TObject); procedure BtnBuildClick(Sender: TObject); procedure LstFileDblClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.BtnOpen1Click(Sender: TObject); begin if OD.Execute then LstFile.Items.Add(OD.FileName); end; procedure TfrmMain.BtnBuildClick(Sender: TObject); var I:Integer; H, Size, FH, BR:DWORD; Local:String; Buf:Pointer; begin Local:= ExtractFilePath(ParamStr(0)); CopyFile(PChar(Local+'Stub\Stub.exe'), PChar(Local+'Out.exe'), False); H:= BeginUpdateResource(PChar(Local+'Out.exe'), True); for I:= 0 to LstFile.Items.Count-1 do begin FH:= CreateFile(PChar(LstFile.Items[I]), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Size:= GetFileSize(FH, nil); GetMem(Buf, Size); ReadFile(FH, Buf^, Size, BR, nil); CloseHandle(FH); UpdateResource(H, RT_RCDATA, PChar(UpperCase(ExtractFileName(LstFile.Items[I]))), MAKEWord(LANG_NEUTRAL, SUBLANG_NEUTRAL), Buf, Size); FreeMem(Buf); end; EndUpdateResource(H, False); end; procedure TfrmMain.LstFileDblClick(Sender: TObject); begin if LstFile.ItemIndex <> -1 then LstFile.Items.Delete(LstFile.ItemIndex); end; end. |
Re: Datei Binder/Joiner
:shock: :shock: was ist das für ein monstercode?
Also einfach aneinanderhängen?
Delphi-Quellcode:
var s1,s2: TStream;
begin s1 := TFileStream.Create('C:\test\1.txt',fmOpenWrite); s2 := TFileStream.Create('C:\test\2.txt',fmOpenRead); s1.Position := s1.Size; s2.Position := 0; s1.CopyFrom(s2,s2.Size); end; |
Re: Datei Binder/Joiner
Zitat:
|
Re: Datei Binder/Joiner
monstercode?
das sind stub(7 Zeilen..) + builder, und stub kann unbegrenzt dateien drinnen haben .. btw. code ist nicht von mir, sondern von TM |
Re: Datei Binder/Joiner
Naja... is mir jetzt auch klar, dass das ein sfx-modul ist...
Aber für Aufgabenstellung sollte meins ja wohl reichen. |
Re: Datei Binder/Joiner
ich beschäftige mich erade auch mit dem thema
jetzt ist aber meine Frage: welche aufgaben hat die ".stub" (die beliebig viele daten drin haben kann) und warum braucht man die um zum beispiel zwei .exe zu verbinden ?? mfg counter |
Re: Datei Binder/Joiner
Bei mir funktioniert der Quelltext des obigen Programms nicht korrekt!
Die letzte Datei, die entpackt wirdi st immer 0 Byte groß :wiejetzt: Kann mir jemand weiterhelfen? Ach ja und warum müssen die Resourcen Uppercase gespeichert werden(funktioniert nur so!)? Die Dateinamen sehen dann nämlich nach dem Entpacken nicht so toll aus :roll: |
Re: Datei Binder/Joiner
Bei mir funktionierte dieser Code damals wunderbar. Ressourcen sind IMHO immer UpperCase, auch wenn du sie nicht UpperCase speicherst. Der Name, den du ausließt wird wieder in Großbuchstaben sein.
Warum die letzte Datei bei dir immer 0 Byte ist kann ich dir nicht sagen, wohl aber, dass man diesen Joiner um einiges verbessern kann, indem man zusätzlich eine Datei mit allen Dateipfäden / Dateinamen anhängt, anhand derer die Dateien dann richtig benannt und in andere Verzeichnisse als C: kopiert werden können. (Man könnte sie evtl. auch noch ausführen lassen oder sowas wie {APPDATA} als Umgebungsvariablen im Pfadnamen zulassen) |
Re: Datei Binder/Joiner
ich mein wenn ich den code öffne und starte dann sieht das programm ja nun ganz simpel aus
aber wo hau er denn die .exe hin die zusammengefügt wird? (darum denk ich fast dass es bei mir auch nicht funzt, finde die nämlich nicht) |
Re: Datei Binder/Joiner
Die Dateien werden in Ressourcen gespeichert.
|
Re: Datei Binder/Joiner
öööööööööö ^^
d.h was ? wie kann ich diese Ressourcen denn auswerten ? |
Re: Datei Binder/Joiner
Siehst doch im Stub code. Es werden einfach alle Ressourcen die im RT_RCDATA vorhanden sind, einfach auf C:\ geschrieben.
|
Re: Datei Binder/Joiner
naja, das ist bei mir eben nicht so....C:/ Windows ist und bleibt leer :-|
naja keine ahnung |
Re: Datei Binder/Joiner
@Zacherl:
Naja bie mir funktioniert der Code eben nicht ^^ Kanns mir halt nicht so wirklich erklären, da die Callbackfunktion ja eigentlich die Datei schreiben müsste, auch die letzte. Vielleicht sollte ich mal nen neustart machen und dann schauen ob es richtig funktioniert :) Ja ich denke, die Resourcen sind wirklich IMMER Uppercase, so sehr, dass falls man im Code das Uppercase rausnimmt, das Ganze nicht mehr funktioniert :gruebel: @ALL: Hat jemand anderes den gleichen Fehler schon mal produziert, also dass die letzte Datei immer null-Bytes groß ist??? Hat sich erledigt mit dem "Fehler", der ist von ganz alleine verschwunden, habe nur Delphi neugestartet. :zwinker: Keine Ahnung woran es lag, hauptsache es funktioniert jetzt :mrgreen: |
Re: Datei Binder/Joiner
Zitat:
|
Re: Datei Binder/Joiner
Doch, wie ich im letzten Beitrag geschrieben habe, es funktioniert jetzt schon. Nur funktioniert es eben nicht falls die Resourcen nicht mit Großbuchstaben gespeichert werden, obwohl die Callback-Funktion eben alle Dateien auflistet! Die Dateien sind dann alle Null Bytes groß, nicht die Resourcen selber aber die Dateien auf der Festplatte!
Weiß da jemand, wie man das beheben kann? PS: Der ResourceHacker ist wirklich ein schönes Programm, kann ich auch nur empfehlen! Noch ne Frage :-D Wo kann man bei Delphi einstellen, welche Resourcen in die Stub mitkompiliert werden? Also konkret geht es mir um die Resourcen mit Namen "DVCLAL" und "PACKAGEINFO", da diese ansonsten ja immer mit entpackt werden, falls man keine Abfrage dafür implementiert. BTW wofür sind die beiden Resourcen genau gut, bzw. braucht man die?? Danke! |
Re: Datei Binder/Joiner
Die beiden Ressourcen kannst du ohne bedenken entfernen. Ich glaube da wird nur gespeichert ob du eine gültige Delphi-Lizenz hast oder so etwas.
|
Re: Datei Binder/Joiner
Ok, danke für die Info!
Dann gehe ich mal davon aus, dass man das nicht "einstellen" kann, ob diese beiden Resourcen mitkompiliert werden. Naja, da ich zu faul bin diese jedesmal von Hand zB mit dem ResourceHacker zu löschen, werde ich wohl einfach ne Abfrage einfügen, die verhindert, dass diese beiden Resourcen ebenfalls entpackt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz