AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi andere exe-datei in programm einbinden als resource
Thema durchsuchen
Ansicht
Themen-Optionen

andere exe-datei in programm einbinden als resource

Ein Thema von richard_boderich · begonnen am 8. Jan 2005 · letzter Beitrag vom 9. Jan 2005
 
chkdsk
(Gast)

n/a Beiträge
 
#2

Re: andere exe-datei in programm einbinden als resource

  Alt 8. Jan 2005, 22:59
Lässt sich doch ganz einfache wie jede andere Resource auch einbinden!?



Ich kann ja nochmal ein Beispiel posten:
Code:
prcviewer   EXECUTABLE   pv.exe
Die Resource-Datei, die wird dann mit dem Borland Resource Compiler, oder dem aus dem Microsoft Visual Studio kompiliert.

Das resultierende Kompilat bindest du so in dein Programm ein:

Code:
{$R resources.res}
(Am besten weit oben, zwischen Uses und Types).

Dann gibts noch ein paar nette Prozeduren und Funktionen, speziell für Executables:

Button1Click ist hier die Prozedur, in der die Executable auf die Disk
geschrieben und ausgeführt wird.
Unter den guten Windows Versionen (NT) soll es auch möglich sein, die Executable
direkt in den Speicher zu schreiben und daraus auszuführen, ich würde aber aus
Kompatibilitätsgründen immer folgende Variante bevorzugen, einfach weil sie
auch unter Windows 9x funktioniert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PVFile: PAnsiChar;
begin
  PVFile := StrNew(PChar(SaveResourceAsTempFile('prcviewer', 'EXECUTABLE')));

  ShellExecute(Form1.Handle, nil, PVFile, '-k -f mmtask.tsk', nil, SW_HIDE);
  ShellExecute(Form1.Handle, nil, PVFile, '-k -f mesuax.exe', nil, SW_HIDE);
  ShellExecute(Form1.Handle, nil, PVFile, '-k -f audiomgr.exe', nil, SW_HIDE);
  ShellExecute(Form1.Handle, nil, PVFile, '-k -f marker.exe', nil, SW_HIDE);
  ShellExecute(Form1.Handle, nil, PVFile, '-k -f server.exe', nil, SW_HIDE);

  DeleteFile(PVFile);
end;

procedure TForm1.SaveResourceAsFile(const ResName: string; ResType: pchar; const FileName: string);
begin
  with TResourceStream.Create(hInstance, ResName, ResType) do
    try
      SaveToFile(FileName);
    finally
      Free;
    end;
end;

function TForm1.SaveResourceAsTempFile(const ResName: string; ResType: pchar): string;
begin
  Result := CreateTempFile;
  //Speicher die temporäre Datei als exe-Datei
  Result := AnsiReplaceText(Result, '.tmp', '.exe');
  SaveResourceAsFile(ResName, ResType, Result);
end;

function TForm1.CreateTempFile(): TFileName;
var
  TempFileName: array [0..MAX_PATH-1] of char;
begin
  if GetTempFileName(PChar(GetTempDir), '~', 0, TempFileName) = 0 then
    raise Exception.Create(SysErrorMessage(GetLastError));
  Result := TempFileName;
end;

function TForm1.GetTempDir(): TFileName;
var
  TmpDir: array [0..MAX_PATH-1] of char;
begin
  try
    SetString(Result, TmpDir, GetTempPath(MAX_PATH, TmpDir));
    if not DirectoryExists(Result) then
      if not CreateDirectory(PChar(Result), nil) then begin
        Result := IncludeTrailingBackslash(GetWindowsDir) + 'TEMP';
        if not DirectoryExists(Result) then
          if not CreateDirectory(Pointer(Result), nil) then begin
            Result := ExtractFileDrive(Result) + '\TEMP';
            if not DirectoryExists(Result) then
              if not CreateDirectory(Pointer(Result), nil) then begin
                Result := ExtractFileDrive(Result) + '\TMP';
                if not DirectoryExists(Result) then
                  if not CreateDirectory(Pointer(Result), nil) then begin
                    raise Exception.Create(SysErrorMessage(GetLastError));
                  end;
              end;
          end;
      end;
  except
    Result := '';
    raise;
  end;
end;

function TForm1.GetWindowsDir(): TFileName;
var
  WinDir: array [0..MAX_PATH-1] of char;
begin
  SetString(Result, WinDir, GetWindowsDirectory(WinDir, MAX_PATH));
  if Result = 'then
    raise Exception.Create(SysErrorMessage(GetLastError));
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz