Einzelnen Beitrag anzeigen

Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: SFXer - Ein SFX-zlib-Packer

  Alt 18. Okt 2005, 16:11
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
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat