![]() |
andere exe-datei in programm einbinden als resource
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 |
Re: andere exe-datei in programm einbinden als resource
Lässt sich doch ganz einfache wie jede andere Resource auch einbinden!?
Ich kann ja nochmal ein Beispiel posten:
Code:
Die Resource-Datei, die wird dann mit dem Borland Resource Compiler, oder dem aus dem Microsoft Visual Studio kompiliert.
prcviewer EXECUTABLE pv.exe
Das resultierende Kompilat bindest du so in dein Programm ein:
Code:
(Am besten weit oben, zwischen Uses und Types).
{$R resources.res}
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; |
Re: andere exe-datei in programm einbinden als resource
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.
|
Re: andere exe-datei in programm einbinden als resource
Geht das aus-der-Ressource-extrahieren nicht viel einfacher mit einem TResourceStream?
Oder überseh ich dabei was? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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