![]() |
Exe in Resource einfügen und im Programm lokal laden
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) |
Re: Exe in Resource einfügen und im Programm lokal laden
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:
Aus der Ressource wieder als Datei speichern:
MYPROGRAM1 RCDATA PRELOAD irgendeinprogramm.exe
Delphi-Quellcode:
Am besten im Temp-Ordner von Windows speichern und von dort mit ShellExecute und den entsprechenden Parametern aufrufen.
ResStream := TResourceStream.Create(hinstance,'MYPROGRAM1',RT_RCDATA);
ResStream.SaveToFile('irgendeinprogramm.exe'); Du willst es wahrscheinlich nicht zwischenspeichern, aber dazu hab' ich keine Ahnung. |
Re: Exe in Resource einfügen und im Programm lokal laden
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; |
Re: Exe in Resource einfügen und im Programm lokal laden
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? |
Re: Exe in Resource einfügen und im Programm lokal laden
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. |
Re: Exe in Resource einfügen und im Programm lokal laden
Zitat:
|
Re: Exe in Resource einfügen und im Programm lokal laden
Das geht bzw. ging es noch unter XP. Allerdings ist es ungleich aufwendiger. Und wozu soll das gut sein?
Beispiel gibt es von Nico: ![]() |
Re: Exe in Resource einfügen und im Programm lokal laden
klar kann man die Resourcen mit anderen Programmen extrahieren :angel:
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. |
Re: Exe in Resource einfügen und im Programm lokal laden
Zitat:
|
Re: Exe in Resource einfügen und im Programm lokal laden
OOOOOOKAY ^^ überredet ich nehm doch die TEMP methode ^^
wie muss ich das denn dann aufrufen?
Delphi-Quellcode:
oder wie?
ExtractRes('EXEFILE', 'MYRES', 'C:\...\meineExe.exe')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz