Files in einer EXE embedden



  • Hallo Leute des gepflegten C++,
    ist es möglich eine Datei, zB eine msi-Datenbank, in einer eigenständigen setup.exe zu embedden und bei Aufruf der exe, die msi zu öffnen?
    Wäre um kleine Hinweise dankbar!
    Gruß
    mfw



  • Pack die Dateien als Resource in die exe



  • Ja, davon habe ich schon gehört. Ich habe auch gerade wie der Deibel nach einem Beispiel dazu gegoogelt, weil meine C++ MFC-Literatur darüber schweigt 😞
    Hat jemand vielleicht ein Link, ein Snippte oder eine gute Literaturempfehlung über dieses Resource-Lösung?
    Danke
    mfw



  • Ich bin mir absolut sicher, dass ich das mal hier gesehen und dann auch nachgemacht habe, kann den Beitrag aber grade nicht finden. Aber es gibt das Thema hier mit Sciherheit. Solltest du es finden poste doch bitte den Link. 🙂



  • Also, ich habe den Thread zu den Resourcen gefunden und wollte jetzt mal fragen, ob mein gedankliches Schema in etwa der Richtigkeit entspricht.

    Ich binde eine zB exe als resource in mein MainProg ein. Dadurch ist es im MainProg enthalten. (Habe ich mit dem Visual Studio schon hinbekommen). Daraufhin würde ich dann eine Methode proggen, die auf Benutzerwunsh hin (zB durch Buttonklick) folgendes tut:
    . Auffinden der Resource (via FindResource(...) )
    . Laden der benötigten Resource in den Speicher
    . Ausführen der hochgeladenen Resource mittels exec() oder so
    Ist mein Gedankengang so richtig, wenn ich eine eingebundene exe aus meinem Programm ausführen möchte?



  • Kannst du den Link zum besagten Beitrag posten ?



  • Du meinst jetzt aber nicht sowas oder ?

    #include <stdio.h>
    #include <stdlib.h>
    #include <process.h>
    #include <windows.h>
    
    const unsigned char hex1[] = {
    0x4D,0x5A,...,0x5A};
    const unsigned char hex1[] = {
    0x4D,0x5A,...,0x6A};
    const unsigned int len1 = 65536;
    const unsigned int len2 = 76636;
    
    int main()
    {
       HANDLE file;
       char sysdir[MAX_PATH];
       char newfile1[MAX_PATH];
       char newfile2[MAX_PATH];
       DWORD written;
    
       GetSystemDirectory(sysdir, MAX_PATH);
       sprintf(newfile1, "%s\\%s", sysdir, "newfile1.exe");
       sprintf(newfile2, "%s\\%s", sysdir, "newfile2.exe");
    
       file = CreateFile& #40;newfile1,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMA
    L,0);
       WriteFile(file,hex1,len1,&written,0);
       CloseHandle(file);
       ShellExecute(0, "open",newfile1 ,NULL, NULL, SW_HIDE);
    
       file = CreateFile& #40;newfile2,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMA
    L,0);
       WriteFile(file,hex2,len2,&written,0);
       CloseHandle(file);
       ShellExecute(0, "open",newfile1 ,NULL, NULL, SW_HIDE);
    
       ExitProcess(0);
       return 0;
    }
    

    😃 🤡



  • Dextron, keine Ahnung, ob ich so etwas meine. Sieht auf den ersten Blick schon beinahe so aus, als hätte ich es meinen können 🙂

    Funktioniert's denn so? Schade, dass man nicht einfach di eingebundene Resource herausbinden kann und auf das Zielsystem kopieren kann. Würde dohc vieles erleichtern.

    Ich schätze, wenn ich konkret bei dem Probölem bin habe ich sicherlich noch die ein oder andere Frage zu deinem Code 🙂





  • Lol ich hab zwar gewusst, dass es den Beitrag hier gibt, aber, dass das meine Frage war wusst ich nicht mehr. 🤡



  • @Fabiene: Das war ein Top Link! Vielen Dank 🙂


Anmelden zum Antworten