Avatar billede safl Nybegynder
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
Avatar billede safl Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester