Geç oldu, yatmadan önce programı senin için hazırladım. En azından asıl yapmak istediğin kısma atlayabilirsin. RESOURCE dosyasını RES klasöründe RES.RES olarak verdim. sen kendine göre düzenlersin. KaynakDosya.EXE ve proje dosyası
KaynakDosya diye bir klasörde. Resource dosyası da
RES diye bir klasördedir.
Kod: Tümünü seç
KaynakDosya RCDATA ..\KaynakDosya\KaynakDosya.EXE
http://www.armantr.com/web/download?file=EXEPacker
Console Application Tarafı : KaynakDosya.EXE Bu senin (A) olacak. Resource olarak B packer projesi içine gömülecek olan hani..

Kendi kendine çalışacak ve bünyesindeki sıkıştırılmış dosyayı açacak, çalıştıracak ve işi bitince silecek olan.
Kod: Tümünü seç
program KaynakDosya;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
Windows,
Forms,
ZLib;
Procedure ZIP_Ac( Kaynak, Hedef :TFileName);
Var
CompFileStream : TStream; // Classes
FileStream : TStream;
DecompressionStream : TDecompressionStream;
Buffer : Array[0..4095] of Char;
BufLen : Integer;
begin
CompFileStream := TFileStream.Create(Kaynak, fmOpenRead OR fmShareDenyWrite);
FileStream := TFileStream.Create(Hedef, fmCreate);
DecompressionStream := TDecompressionStream.Create(CompFileStream);
BufLen := DecompressionStream.Read(Buffer,SizeOf(Buffer));
while BufLen > 0 do
begin
FileStream.Write(Buffer, BufLen);
BufLen := DecompressionStream.Read(Buffer,SizeOf(Buffer));
end;
DecompressionStream.Free;
FileStream.Free;
CompFileStream.Free;
end;
// Uses ZLib eklenecek...
Var
Kaynak, Hedef : TFileName;
FS_Kaynak, FS_Hedef : TFileStream;
Boyut : dWord; // Windows
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
Kaynak := Application.ExeName; //Forms
Hedef := ChangeFileExt(Application.ExeName, '_(2).EXE');
FS_Kaynak := TFileStream.Create( Kaynak, fmOpenRead OR fmShareDenyNone );
FS_Hedef := TFileStream.Create( Hedef, fmCreate );
FS_Kaynak.Seek( FS_Kaynak.Size-4, soFromBeginning);
FS_Kaynak.Read(Boyut, SizeOf(Boyut));
FS_Kaynak.Seek( FS_Kaynak.Size-4-Boyut, soFromBeginning);
FS_Hedef.CopyFrom( FS_Kaynak, Boyut);
FS_Kaynak.Free;
FS_Hedef.Free;
ZIP_Ac(Hedef, ChangeFileExt(Application.ExeName,'_(3).EXE'));
// Burada üretilen son dosya çalıştırılır vs. sonra da işi bitince silinir...
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
EXEPacker Projesi
Kod: Tümünü seç
{$R RES\RES.RES}
// Uses ZLib eklenecek...
Procedure ZIP_Yap( Kaynak, Hedef :TFileName);
Var
FileName : String;
CompFileStream : TStream;
CompressionStream : TCompressionStream;
FileStream : TStream;
begin
FileName := Application.Exename;
FileStream := TFileStream.Create(Kaynak, fmOpenRead OR fmShareDenyWrite);
CompFileStream := TFileStream.Create(Hedef, fmCreate);
CompressionStream := TCompressionStream.Create(clDefault,CompFileStream);
CompressionStream.CopyFrom(FileStream,0);
CompressionStream.Free;
CompFileStream.Free;
FileStream.Free;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
RS : TResourceStream;
Kaynak, Hedef : TFileName;
FS_Kaynak, FS_Hedef : TFileStream;
Boyut : dWord;
begin
With TOpenDialog.Create(Nil) do begin
if Execute then begin
Kaynak := FileName;
end else begin
Free;
Exit;
end;
Free;
end;
Hedef := ExtractFilePath(Kaynak) + 'Hedef.EXE';
ZIP_Yap(Kaynak, ChangeFileExt(Hedef,'.ZIP'));
RS := TResourceStream.Create(HInstance, 'KaynakDosya', RT_RCDATA);
FS_Kaynak := TFileStream.Create( ChangeFileExt(Hedef,'.ZIP'), fmOpenRead OR fmShareDenyNone );
FS_Hedef := TFileStream.Create( Hedef, fmCreate );
RS.Seek( 0, soFromBeginning);
FS_Hedef.CopyFrom( RS, RS.Size );
FS_Kaynak.Seek( 0, soFromBeginning);
FS_Hedef.CopyFrom( FS_Kaynak, FS_Kaynak.Size );
Boyut := FS_Kaynak.Size;
FS_Hedef.Write( Boyut, SizeOf(Boyut) );
FS_Kaynak.Free;
FS_Hedef.Free;
end;
Başarılar...