AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Exe in Resource einfügen und im Programm lokal laden
Thema durchsuchen
Ansicht
Themen-Optionen

Exe in Resource einfügen und im Programm lokal laden

Ein Thema von J Kadison · begonnen am 26. Feb 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
J Kadison

Registriert seit: 8. Sep 2007
Ort: Ebertsheim
96 Beiträge
 
Delphi 7 Personal
 
#1

Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:26
Huhu!

Ich möchte mehrere Exe-Dateien in eine *.RES datei packen und später in meinem Delphi-Anwendung (während der Laufzeit) diese Exe aus der laufenden Exe heraus starten. Ist soetwas möglich?

1. wie muss dann die *.rc Datei aussehen, damit ich EXE'n einbinden kann?
2. wie kann ich denn aus dem Programm eine exe aus der Ressource aufrufen/laden? (mit parameter)
MFG
Joshi
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:35
Eintrag in der RC-Datei könnte so aussehen (ob PRELOAD OK ist, weis ich aber auch nicht, verwende ich immer für meine eingebundenen Ressourcen :
Code:
MYPROGRAM1 RCDATA PRELOAD irgendeinprogramm.exe
Aus der Ressource wieder als Datei speichern:
Delphi-Quellcode:
  ResStream := TResourceStream.Create(hinstance,'MYPROGRAM1',RT_RCDATA);
  ResStream.SaveToFile('irgendeinprogramm.exe');
Am besten im Temp-Ordner von Windows speichern und von dort mit ShellExecute und den entsprechenden Parametern aufrufen.

Du willst es wahrscheinlich nicht zwischenspeichern, aber dazu hab' ich keine Ahnung.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:37
Hallo

Ich habe vor einigen Jahren mal diese Anleitung geschrieben:

1. Starte Notepad und erstelle ein .rc-file, das etwa so aussieht:

TESTFILE EXEFILE C:\Windows\Notepad.exe

(Stelle sicher, dass der Pfad zur Exe-Datei korrekt ist!)

2. Speichere es als myres.rc

3. Kompiliere die Datei mit brcc32.exe
(Im Delphi-bin Verzeichnis) um die Datei myres.res zu erhalten.

4. Kopiere myres.res in das entsprechende Projekt-Verzeichnis.

5. In der unit, schreibe etwa das folgende:

Delphi-Quellcode:
var
  Form1: TForm1;
  NOTEPAD_FILE: string;

implementation

{$R *.DFM}
{$R MYRES.RES}

function GetTempDir: string;
var
  Buffer: array[0..MAX_PATH] of Char;
begin
  GetTempPath(SizeOf(Buffer) - 1, Buffer);
  Result := StrPas(Buffer);
end;

// Ressource extrahieren
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
  Res: TResourceStream;
begin
  Result := False;
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
  try
    Res.SavetoFile(ResNewName);
    Result := True;
  finally
    Res.Free;
  end;
end;

// Datei ausführen
procedure ShellExecute_AndWait(FileName: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    lpFile := PChar(FileName);
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);
end;

// Testen:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ExtractRes('EXEFILE', 'TESTFILE', NOTEPAD_FILE) then
    if FileExists(NOTEPAD_FILE) then
    begin
      ShellExecute_AndWait(NOTEPAD_FILE);
      ShowMessage('Notepad beendet!');
      DeleteFile(NOTEPAD_FILE);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  NOTEPAD_FILE := GetTempDir + 'Notepad_FROM_RES.EXE';
end;
Thomas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:45
Moin, Moin.
Vorgehensweise ist mir verständlich.
Aber: Wozu soll das gut sein?

Um sicherzustellen, dass die Programme NUR durch die Delphi-Anwendung gestartet werden können?

Kann man die einzelnen Programme nicht mit Hilfe anderer Software wieder aus der Ressource extrahieren?
Ralph
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:51
Also ich hatte es verwendet, um einen benötigten TrueType-Font und ein Standard Formular (als Textdatei) mit zu geben.

Manchmal will man nur eine einzelne EXE direkt ausführbar weitergeben.
  Mit Zitat antworten Zitat
J Kadison

Registriert seit: 8. Sep 2007
Ort: Ebertsheim
96 Beiträge
 
Delphi 7 Personal
 
#6

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:54
Zitat von toms:
Ich habe vor einigen Jahren mal diese Anleitung geschrieben:
Die Anleitung sieht gut aus aaaaber. . . kann ich die jetzt ncoh so verfeinern, dass ich auch nichts mehr in das TEMP verzeichniss speichern muss? also dass GARKEINE dateien angelegt werden? sondern diese nur ausgeführt werden?
MFG
Joshi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 19:59
Das geht bzw. ging es noch unter XP. Allerdings ist es ungleich aufwendiger. Und wozu soll das gut sein?

Beispiel gibt es von Nico: http://www.michael-puff.de/Developer.../Importe/Nico/ -> inmemexe.zip
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#8

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 20:04
klar kann man die Resourcen mit anderen Programmen extrahieren

und dieses Vorgehen hat auch noch einen Nachteil ... wenn das Programm keine Rechte hat, um in seinem Verzeichnis eine Datei zu erstellen und auszuführen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 20:08
Zitat von himitsu:
und dieses Vorgehen hat auch noch einen Nachteil ... wenn das Programm keine Rechte hat, um in seinem Verzeichnis eine Datei zu erstellen und auszuführen.
Darum wird es ja im Temp-Verzeichnis gespeichert
Thomas
  Mit Zitat antworten Zitat
J Kadison

Registriert seit: 8. Sep 2007
Ort: Ebertsheim
96 Beiträge
 
Delphi 7 Personal
 
#10

Re: Exe in Resource einfügen und im Programm lokal laden

  Alt 26. Feb 2009, 20:09
OOOOOOKAY ^^ überredet ich nehm doch die TEMP methode ^^

wie muss ich das denn dann aufrufen?

ExtractRes('EXEFILE', 'MYRES', 'C:\...\meineExe.exe') oder wie?
MFG
Joshi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:18 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