Mon programme est conçu pour fonctionner sur la plate-forme Windows.
Parfois, il se termine par une erreur. Je n'ai pas pu le déboguer sur chaque ordinateur où il est installé; j'ai donc ajouté un gestionnaire d'exceptions vectorisé qui envoie des informations sur les exceptions au serveur. Il en avait certains 0xC0000005
des exceptions; Je l'ai corrigé, mais le programme se termine toujours (je n'ai pas pu reproduire d'erreur sur mon PC).
J'ai écrit un autre programme, qui attend la poignée du processus principal et envoie un rapport avec le code de sortie du processus lorsque le processus principal se termine. J'ai regardé les codes de sortie, et la plupart d'entre eux étaient 0x40010004
(DBG_TERMINATE_PROCESS
). Je sais que ce code de sortie apparaît lorsque le débogueur est attaché à une application, puis le termine; mais je suis sûr qu'il n'y a pas de débogueur.
Donc ... Dans lequel d'autres cas peuvent être traités avec DBG_TERMINATE_PROCESS
code de sortie?
Sur le plan théorique, cela pourrait être n'importe quoi, puisque TerminateProcess
a un paramètre de code de sortie.
Sur le plan pratique, cela est probablement dû à l'arrêt du système. Lorsque Windows s'arrête, il essaie de quitter les programmes en cours d'exécution avec élégance (plus à ce sujet ici ). S'ils refusent de quitter, ils peuvent être interrompus par le système avec le code de sortie 0x40010004
. Par exemple, si vous disposez d'un programme GUI qui affiche une boîte de dialogue modale, puis que vous essayez d'arrêter le système, vous serez invité avec un message indiquant que "xy.exe empêche l'arrêt". Si vous cliquez sur "Forcer l'arrêt", le processus sera tué avec le code de sortie 0x40010004
.
Si vous essayez de reproduire cela, sachez que le programme en attente du processus de votre application HANDLE
peut être interrompu avant votre application principale.