View Full Version : [visual c++] includere exe dentro altro exe
vorrei inserire come risorsa dentro a un'applicazione un'altra applicazione da far partire qnd voglio...
come inserirla e come farla partire???
grazie mille!!!
vorrei inserire come risorsa dentro a un'applicazione un'altra applicazione da far partire qnd voglio...
come inserirla e come farla partire???Immagino che per "risorse" intendi le risorse gestite con i file .rc in Win32, giusto??
Per far partire l'exe devi comunque estrarre la risorsa, scriverla sul file system ed eseguire il file.
Sempre per quanto riguarda un file .rc, per includere una risorsa "custom" si deve usare un tipo di risorsa non standard.
Esempio:
ID_MIOEXE BINRES "miofile.exe"Ovviamente usando le funzioni di apertura delle risorse, si dovrà specificare come tipo "BINRES", che l'ho inventato io come nome ma può essere personalizzato.
capito grazie... e per poi estrarlo ed eseguirlo come fare?? :confused:
poi estrarlo ed eseguirlo come fare?? :confused:Per leggere una risorsa si usano le funzioni Win32: FindResource, LoadResource, LockResource.
Per eseguire un file si può usare la funzione Win32: ShellExecute.
ooops, ne ho dimenticata una: serve anche la funzione SizeofResource. Per sapere la dimensione della risorsa.
HGLOBAL resHandle = NULL;
HRSRC res;
char *resData;
int resSize;
FILE *fp;
FILE *err=fopen("ba.txt","wb");
res = FindResource(0, MAKEINTRESOURCE(IDR_BINRES1), BINRES);
if (!res) fprintf(err,"FindResource() fallita!");
else {
resHandle = LoadResource(0, res);
if (!resHandle) fprintf(err,"LoadResource() fallita!");
else {
resData = (char*)LockResource(resHandle);
resSize = SizeofResource(NULL, res);
if ((fp=fopen("myexe.exe","wb"))){
int i;
for (i=0; i < resSize ; i++) {
fputc(resData[i], fp);
fclose(fp);
}
//ShellExecute(0,"open","myexe.exe", 0, 0, SW_SHOWNORMAL);
}
else fprintf(err,"fopen() fallita!");
}
}
fclose(err);
res = FindResource(0, MAKEINTRESOURCE(IDR_BINRES1), BINRES);
a questa riga mi dice unencrared identifier... come rimediare??? grazie ciao :D
ok risolto... ma ora avrei un'altra domanidina credo facile facile...
cosa devo includere per poter usare la funzione ShellExecute???? :muro:
res = FindResource(0, MAKEINTRESOURCE(IDR_BINRES1), BINRES);Come sicuramente hai intuito, BINRES deve essere una stringa. Quello che passi nel secondo parametro può essere invece una stringa oppure un identificativo numerico (il secondo, nel tuo caso).
for (i=0; i < resSize ; i++) {
fputc(resData[i], fp);
fclose(fp);
}No, così non va. Non devi mettere la fclose nel ciclo. ;) E poi comunque è molto meglio se usi una fwrite, così scrivi direttamente tutto il blocco di memoria sul file.
cosa devo includere per poter usare la funzione ShellExecute????<shellapi.h>. Assicurati anche che il linker effettui il link con shell32.lib!!
1) Come sicuramente hai intuito, BINRES deve essere una stringa. Quello che passi nel secondo parametro può essere invece una stringa oppure un identificativo numerico (il secondo, nel tuo caso).
2) No, così non va. Non devi mettere la fclose nel ciclo. ;) E poi comunque è molto meglio se usi una fwrite, così scrivi direttamente tutto il blocco di memoria sul file.
3) <shellapi.h>. Assicurati anche che il linker effettui il link con shell32.lib!!
i punti 1 e 2 con fatica li avevo chiariti :D ... per il 3 grazie ora provo e ti faccio sapere
perfetto funziona tutto... grazie mille
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.