
Hab vergessen zu sagen, dass nur die Packer.exe wichtig ist. SFX.exe ist das Modul, wo die Dateien rangehängt werden. Und das erwartet, das mindestens eine Datei rangehängt ist.
In dem nachher erstellten inputDialog kannst du dann den Dateinamen des SFX archieves angeben.
Beim aneinanderhängen der Dateien muss ich zugeben, dass ich etwas geschummelt habe. Dafür habe ich folgenden Code aus dem EDH benutzt:
Delphi-Quellcode:
procedure Join(Main_FileName, Hidden_Filename : string);
var
MainFile : TFileStream;
HiddenFile : TFileStream;
SizeOfFile : Cardinal;
SearchWord : string[10];
begin
MainFile := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
try
SizeOfFile := MainFile.Size;
HiddenFile := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone);
try
MainFile.Seek(0, soFromEnd);
MainFile.CopyFrom(HiddenFile, 0);
MainFile.Seek(0, soFromEnd);
finally
HiddenFile.Free;
end;
SearchWord := IntToStr(SizeOfFile) + #0;
MainFile.Seek(0, soFromEnd);
MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord));
finally
MainFile.Free;
end;
end;
Und zum splitten
Delphi-Quellcode:
procedure Split(Main_FileName, NewFromMain_Filename : string);
var
MainFile : TFileStream;
SplitFile : TFileStream;
HelpStr : string[10];
GetSize : integer;
begin
MainFile := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
try
SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone);
try
MainFile.Position := MainFile.Size - 11;
MainFile.Read(HelpStr, 10);
GetSize := StrToInt(HelpStr);
MainFile.Position := GetSize;
SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize);
SplitFile.Size := SplitFile.Size - 11;
MainFile.Size := GetSize;
finally
SplitFile.Free;
end;
finally
MainFile.Free;
end;
end;
Das einzige was man im SFX Modul sieht ist Der Pfadauswahldialog. Diesen habe ich mittels der
WinAPI Funktion
SHBrowseForFolder aufgerufen.
Ansonsten habe ich einfach die
zlib eingebunden, die zusammengepackten Dateien (Ich habe noch ne Datei, wo alle Dateinamen drinstehen mit angehängt) damit komprimiert und das ganze dann an das SFX-Modul angehängt.
Zitat:
Wie hast du die
zLib so klein bekommen, dass sie
nonVCL ist?
Also wenn ich die
zlib in ein Konsolenprogramm einbinde, ist das Programm 85 kb groß. Mit UPX komprimiert (is auch sfx.exe) noch 38,5 kb