02. februar 2006 - 11:15
Der er
1 løsning
Exefiler i delphi resource files
Hello!
Er der nogle der kan give et eksempel på at inkludere 2 exefiler i en delphi resource file?
Og hvordan de pakkes ud af ressource filen og gemmes på disken.
Det skal bruges til at have hjælpe programmer med i 'mit program', der kan udpakkes når programmet startes hvis de ikke allerede er pakket ud.
på forhånd tak
Simon
02. februar 2006 - 11:45
#1
Fandt sgu selv ud af det. Man laver først en resource fil ala:
HelpApp.rc
7zip RCDATA 7za.exe
Pscp RCDATA pscp.exe
denne compiles med:
brcc32 HelpApp.rc
i Project>View Source tilføjes koden:
program Project1;
uses
Forms, Windows, Classes, SysUtils, // tilføjelse af et par klasser.
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
{$R HelpApp.RES} // Sti til resourcefilen
var
rStream: TResourceStream;
fStream: TFileStream;
fname: string;
sAppPath : string;
begin
Application.Initialize;
{
Extract of helper application if not already available
helper applications are pscp.exe and 7za.exe
}
//start extract pscp.exe if not fond
sAppPath:=IncludeTrailingPathDelimiter
(ExtractFileDir(Application.ExeName));
if not FileExists(sAppPath +'pscp.exe') then
begin
fname:=sAppPath+'pscp.exe';
rStream := TResourceStream.Create
(hInstance, 'pscp', RT_RCDATA);
try
fStream := TFileStream.Create(fname, fmCreate);
try
fStream.CopyFrom(rStream, 0);
finally
fStream.Free;
end;
finally
rStream.Free;
end;
end;
//stop extract pscp.exe if not fond
//start extract 7za.exe if not fond
sAppPath:=IncludeTrailingPathDelimiter
(ExtractFileDir(Application.ExeName));
if not FileExists(sAppPath +'7za.exe') then
begin
fname:=sAppPath+'7za.exe';
rStream := TResourceStream.Create
(hInstance, '7zip', RT_RCDATA);
try
fStream := TFileStream.Create(fname, fmCreate);
try
fStream.CopyFrom(rStream, 0);
finally
fStream.Free;
end;
finally
rStream.Free;
end;
end;
//stop extract 7za.exe if not fond
Application.CreateForm(TForm1, Form1);
Application.Run;
end.