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