app aus resource aufrufen
-
hey leutz!
folgendes thema:
ich will aus meinem programm ein anderes aufrufen.
eigentlich kein problem, aber-> kann ich dieses programm
irgendwie als resource inkludieren, damit ich nicht die binary
des 2. programms immer mitgeben m uss, wenn ich das 1. proggie weitergebe???ich habs so versucht, dass ich die *.exe als resource inkludiert habe
und dann zur laufzeit ausgelesen habe und in eine temporöre
datei geschrieben habe, diese ausgeführt und bei beendigung des hauptprogrammes
wieder löschen könnte. zum auslesen habe ich_read ( IDR_EXE1, &Buf, 1);
benutzt. nur das klappt nich, was ja auch ganz logisch ist,
da IDR_EXE1 kein handle einer datei ist.gibts da eine möglichkeit, sowas zu machen
(*.exe als resource und zu laufzeit ausführen)???thx im vorraus,
ich
-
Hallo,
resourcen lassen sich zur Laufzeit aus der exe extrahieren und auf Platte
speichern. Dein Ansatz funktioniert also.Beispielcode (ungetestet)
HINSTANCE hInst = AfxGetInstanceHandle(); HRSRC hRes = ::FindResource(hInst, "APP", "SETUPFILE"); HGLOBAL hResource = ::LoadResource(hInst, hRes); DWORD dwLen = ::SizeofResource(hInst, hRes); BYTE* pFileData = (BYTE*)::LockResource(hResource); CFile f; f.Open(_T("MyResource.exe"), CFile::modeCreate|CFile::modeWrite)); f.Write(pFileData, dwLen); f.Close(); ::FreeResource(hResource);
FindResource(hInst, "APP", "SETUPFILE") muss deinen Bedürfnissen angepasst werden!
Gruss
-
ma guggn, ob ich das alles raff, abba thx für
die schnelle antwort!ich probiers einfach mal aus, ich meld mich dann ma wieder
-
ok, verstanden hab ichs grösstenteils.
void CExtractDlg::OnRun() { CFile f; HINSTANCE hInst = AfxGetInstanceHandle(); HRSRC hRes = ::FindResource(hInst,"IDR_APPFILE", "APP"); //musste resourcen-name/typ tauschen HGLOBAL hResource = ::LoadResource(hInst, hRes); DWORD dwLen = ::SizeofResource(hInst, hRes); BYTE* pFileData = (BYTE*) ::LockResource (hResource); f.Open(_T("MyResource.exe"), CFile::modeCreate|CFile::modeWrite); f.Write(pFileData, dwLen); f.Close(); ::FreeResource(hResource); }
aso, fehlermeldungen bekomme ich nicht.
die datei "MyResource.ico" wird auch erstellt, hat aber keinen
inhalt ( grösse 0 byte).das problem ist
HRSRC hRes = ::FindResource(hInst, "IDR_APPFILE", "APP");
hRes erhält den wert NULL, deshalb kommt bei den funktionen,
die hRes als parameter übergeben bekommen, auch nichts anständiges herraus.mit GetLastError () krieg ich den wert
1814 (ERROR_RESOURCE_NAME_NOT_FOUND).versuche ich, eine standard resource (icon) auf diese weise zu laden, gibts
1813 (ERROR_RESOURCE_TYPE_NOT_FOUND).DA LIEGT WOHL DAS PROBLEM!!!
ausserdem steht in der dokumentation:
LPVOID LockResource(
HGLOBAL hResData // handle to resource to lock
);Trying to lock a resource by using the handle returned by the FindResource or FindResourceEx
function will not work. You will get back a value that is incorrect and points to random data.hat eventuell auch was zu sagen
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
FEHLER GEFUNDEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!es muss so sein:
HRSRC hRes = ::FindResource(hInst, "#129", "APP");
'#' und dann die dezimalzahl, als welche die resourcen ID definiert ist
als string übergeben!!!!ES FUNZET!!!!!!!!!!!!!
thx an alles und jeden!!! heut ist ein supertag!!!!!!
-
gibts vielleicht die möglichkeit,
die app ohne extrahieren aus der exe direkt auszuführen???ich hab nichts gefunden, abba vielleicht...