Bonjour,
je travail sur un pc gaming (Quixant), celui-ci est utilis� dans les jeux forain/casino car il peut �tre �teint en coupant directement sont alimentation. (pratique dans les boutiques car au soir power off via disjoncteur g�n�rale).
afin de faire un bootloader (mis ajour) via une cl� usb, j'utilise la structure SHFILEOPSTRUCTA pour copier des fichier.
mon application se lance donc automatiquement a l'allumage du pc.
si elle detecte une cl� usb (� l'allumage, power on) avec le bon dossier , elle enclenche la proc�dure de mis a jour:
la mise a jour contient un dossier media_new et un fichier application_new.exe qui remplaceront le fichier application.exe en cours de fonctionnement et du dossier media
1) copie du fichier application_new.exe et du dossier media_new de la cl� usb sur le disque
2) renommage fichier application.exe en application_old.exe et du dossier media en media_old
3) renommage fichier application_new.exe en application.exe et du dossier media_new en media
4) suppression du fichier application_old.exe et du dossier media_old
5) exit du programme
6) power off de la machine - retirer la cl� usb (sinon le boottload red�marre) et power on apres 1 minutes de pause.
LE PROBLEME: avec certaine cl� usb au red�marrage power on apres un boottload, un ou plusieurs fichiers sont parfois corrompu (image .png) et plante toute l�application.
si je n'effectue pas de power on, je clique directement sur le fichier.exe apres le bootload pour relancer l'application je n'ai jamais ce probl�me.
je quitte pourtant le programme afin de bien lib�rer toute les ressources au cas ou j'en aurais oublier une mais !!!
avez vous une id�e ?
un bout de code pour expliquer la copier des fichiers:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SHFILEOPSTRUCTA sh; bool error = false; //copy media sh.hwnd = NULL; sh.wFunc = FO_COPY; sh.pFrom = usbKeyFolderMediaPath00; sh.pTo = applicationFolderPath00; sh.fFlags = NULL; sh.fAnyOperationsAborted = false; sh.hNameMappings = NULL; sh.lpszProgressTitle = NULL; if (SHFileOperationA(&sh) != 0) { MessageBox(NULL, L"bootload downloading error 1", NULL, NULL); }
Partager