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
Antwort Antwort
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

andere exe-datei in programm einbinden als resource

  Alt 8. Jan 2005, 22:37
hi ihr,

ich such nach ner moeglichkeit eine anderes programm als resource
in mein programm einzubinden. ich glaub da gab es doch mal
nen compilerbefehl für {-$R} oder so etwas.
vielleicht koennte mir mal einer von euch auf die spruenge helfen,
da waere echt nett.

gruß

euer richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
chkdsk
(Gast)

n/a Beiträge
 
#2

Re: andere exe-datei in programm einbinden als resource

  Alt 8. Jan 2005, 23: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: andere exe-datei in programm einbinden als resource

  Alt 9. Jan 2005, 21:08
Was erzeugst du da eigentlich alles für Verzeichnisse? Und zu dem noch im Windowsvrezeichnis? Da dürftest du bei mir keine Chance haben, da ich nur als Benutzer mit eigeschränkten Rechrten arbeite.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#4

Re: andere exe-datei in programm einbinden als resource

  Alt 9. Jan 2005, 21:10
Geht das aus-der-Ressource-extrahieren nicht viel einfacher mit einem TResourceStream?

Oder überseh ich dabei was?
Julian J. Pracht
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz