Frage an die Profis
-
Ich habe eine Frage an die Profis...
Ich lade Bin-Daten aus einer Ressource und lege diese in der Klasse CMemFile ab.
Wenn die dieses MemFile eine Exe ist, möchte ich gern wissen, wie kann ich dieses File ausführen wie Prog von Festplatte..nach dem Prinzip
::ShellExecute(....);Ich möchte es vermeiden, das ganze NICHT als TempFile aufFestplatte speichern und es direkt aus dem Speicher heraus starten.....
Das Problem ist meiner Meinung nur das, das ich für dieses File keine Pfadangabe habe...Wer kann mir helfen?
Danke schon mal im voraus.......
LG Bernd
-
Hallo,
die Resource aus dem laufendem Process heraus zu starten, ohne die Resource
auf die Platte zu kopieren, ist eine sehr schwierige Angelegenheit und
über die API von Windows in jeder Windows Version anders.
Um das zu verwirklichen, must du das exe Format aus dem ff kennen,
da der Speicherbereich und alles was zum ausführen eine exe nötig ist,
von Dir erstellt werden muß. Ich habe mal Code-Beispiele für Windows 2000
in diversen Groups gesehen, die waren sehr riskant und fehleranfällig und am
Schluss hat es jeder wieder verworfen.Hier einmal ein Auszug, was passieren muss:
LOADING PROCEDURE
Let’s see how the loader interprets a PE file and prepares a memory image for execution. The loader needs to find the free virtual address space to map the file in memory. The loader tries to load the image at the preferred base address. After this is done, the loader maps the sections in memory. The loader goes through the section table and maps each section at the address calculated by adding the RVA of the section to the base address. The page attributes are set according to the section’s characteristic requirements. After mapping the section in memory, the loader performs based relocation if the base address is not equal to the preferred base address. Then, the import table is checked and the required DLLs are loaded. The same procedure for loading an executable–mapping sections, based relocation, resolving imports, and so on–is applied while loading a DLL. After loading each DLL, the IAT is fixed to point to the actual imported function address.
Quelle: http://www.windowsitlibrary.com/Content/356/11/6.html
Es wird also wohl doch das beste sein, die Resource Temporär abzulegen,
zu starten und später wieder zu loschen.Gruss
EarlyBird
-
Ich hab mir das auch mal angeschaut, und stimme EarlyBird vollkommen zu!
Und so groß werden die Sachen ja nicht sein, oder?
Sonst würde man es ja auch nicht in den Speicher laden, oder?
-
C++ Core: Es gibt sicher auch andere Gründe das File nicht auf die Platte zu extrahieren.
-
Danke erst mal für Eure Meinung dazu.
Der zusammenhang für mein vorhaben ist der, daß das ein SystemRep-Tool wird, welches von zB. CD läuft, und es keine HDD gibt. Die Ressourcen sind fertige, stinknormale EXEDatei, und nur binär als Resource ablegt.
die bits und bytes aus der res. laden ist ja kein akt. aber [b]dann als 2. unabhängiges programm[/b] laufen lassen, genauso als wenn man mal nebenbei mal den notepad öffnet.....
es muß ja nicht CMemFile ein, wenn es (noch) was anderes gäbe.....Frohes Adventssingen...