Je vais avoir du mal à faire fonctionner ça, en espérant que l'un d'entre vous l'ait déjà fait.Bloqué sur GenerateConsoleCtrlEvent en C# avec les applications de la console
J'ai une application de console C# qui exécute un processus enfant qui hérite de sa console. Je veux qu'un ctrl-c attrapé par l'application externe soit passé à l'application intérieure afin qu'il puisse avoir une chance de fermer bien.
J'ai un code très simple. Je démarre un processus, puis l'interroge avec WaitForExit (10). J'ai également un gestionnaire CancelKeyPress enregistré, qui définit un booléen à vrai quand il se déclenche. La boucle d'interrogation vérifie également cela, et quand c'est vrai, il appelle GenerateConsoleCtrlEvent() (que j'ai mappé à travers pinvoke).
J'ai essayé beaucoup de combinaisons de paramètres avec GenerateConsoleCtrlEvent(). 0 ou 1 pour le premier param, et 0 ou l'ID du processus enfant pour le second param. Rien ne semble fonctionner. Parfois, je reçois un faux retour et Marshal.GetLastWin32Error() renvoie 0, et parfois je reçois vrai retour. Mais aucun ne provoque l'application enfant à recevoir un ctrl-c. Pour être absolument sûr, j'ai écrit une application de test C# pour être l'application enfant qui imprime ce qui se passe avec elle et vérifié que taper manuellement ctrl-c quand il s'exécute le fait correctement quitter. Je me suis cogné la tête contre ce pour quelques heures. Quelqu'un peut-il me donner des indications sur où aller avec cela?
J'ai le même problème. GenerateConsoleCtrlEvent semble être rompu. Cela n'affecte pas le processus, qu'il dispose ou non d'une fenêtre de console, et qu'il ait démarré avec CREATE_NEW_PROCESS_GROUP ou non. J'ai tout essayé, et il semble qu'il n'y ait aucun moyen de fermer proprement une application console démarrée avec Process.Démarrer ou CreateProcess lorsqu'il ne fait pas partie de la fenêtre de console du processus appelant. – Triynko