Auf GenerateConsoleCtrlEvent in C # mit Konsolen-Apps stecken

Es fällt mir am schwersten, das zum Laufen zu bringen, in der Hoffnung, dass einer von Ihnen das schon einmal getan hat.

Ich habe eine C # -Konsolenanwendung, in der ein untergeordneter Prozess ausgeführt wird, der seine Konsole erbt. Ich möchte, dass ein von der äußeren App abgefangenes Strg-C an die innere App weitergeleitet wird, damit diese die Möglichkeit hat, ordnungsgemäß herunterzufahren.

Ich habe einen sehr einfachen Code. Ich starte einen Prozess und rufe ihn dann mit WaitForExit (10) ab. Ich habe auch einen CancelKeyPress-Handler registriert, der einen Bool auf true setzt, wenn er ausgelöst wird. Die Polling-Schleife überprüft dies ebenfalls und ruft, wenn dies zutrifft, GenerateConsoleCtrlEvent () auf (das ich durch Pinvoke zugeordnet habe).

Ich habe viele Kombinationen von Parametern für GenerateConsoleCtrlEvent () ausprobiert. 0 oder 1 für den ersten Parameter und entweder 0 oder die ID des untergeordneten Prozesses für den zweiten Parameter. Nichts scheint zu funktionieren. Manchmal erhalte ich eine falsche Antwort und Marshal.GetLastWin32Error () gibt 0 zurück, und manchmal erhalte ich eine echte Antwort zurück. Aber keine bewirkt, dass die untergeordnete App ein Strg-C empfängt.

Um absolut sicher zu sein, habe ich eine Test-C # -Anwendung als untergeordnete Anwendung geschrieben, die druckt, was damit los ist, und überprüft, dass die manuelle Eingabe von Strg-C beim Ausführen dazu führt, dass sie beendet wird.

Ich habe ein paar Stunden lang mit dem Kopf dagegen geschlagen. Kann mir jemand einen Hinweis geben, wohin ich damit gehen soll?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage