Ich arbeite an einer Anwendung, die Powershell-Skripts zum Einrichten und Starten von Dienstprozessen (nicht formale Windows-Dienste) startet. Ich möchte ctrl + c Signale an diese Powershell-Prozesse und ihre untergeordneten Prozesse senden können, um sie sauber herunterzufahren.windows ctrl + c Signale nicht feuern
Wenn ich erstellen Sie den Powershell-Prozess I CREATE_NEW_PROCESS_GROUP
gesetzt, die SetConsoleCtrlHandler(NULL,TRUE)
implizit aufruft, die abschaltet effektiv ctrl +c für den erstellten Prozess und seine Kinder. Ich kann nicht verwenden ctrl + brechen weil dies Powershell in den Debug-Modus versetzt. So in der Powershell-Prozess, den ich starten, nenne ich SetConsoleCtrlHandler(NULL,FALSE)
ctrl + c wieder einzuschalten und meine Anwendung haben, dann ruft GenerateConsoleCtrlEvent
ctrl + c Ereignisse Power der Prozessgruppe zu senden, wenn ich diesen Prozess stoppen wollen Baum. Das funktioniert perfekt, aber mit einem großen Fehler.
Wenn ich Typ ctrl + c in der Konsole manuall wo meine Anwendung ausgeführt wird, meine Anwendung fängt den ctrl + c und ruft dann GenerateConsoleCtrlEvent
für jeden Powershell-Prozess. Dies scheint gut, aber nur das erste Mal zu funktionieren.
Nach meiner Anwendung beendet es scheint ctrl +c nun für jedes Programm i in dieser Konsole laufen ausgeschaltet. Wenn ich PING
oder meine eigene Anwendung, ctrl + c mache, tut nichts und ich bin nicht sicher, wie man weiter debuggt.
Interessanterweise sehe ich manchmal Griffe in Process Explorer zu den toten Powershell-Prozessen in conhost.exe. Wenn ich diese Handles im Process Explorer schließe, kommt SOMETIMES ctrl + c zurück. Ich vermute also, dass ein Handle-Leakage vorliegt, aber diese Beobachtung ist nicht konsistent und ich bin vorsichtig, meine Prozess-Handles in meiner Anwendung freizugeben.
Irgendwelche Gedanken auf, was meine Konsole kann geschluckt ctrl +c Signale zu verursachen?
Alles nach 'UPDATE' sollte ausgeschnitten und als Antwort gepostet werden. Ja, Sie dürfen Ihre eigenen Fragen beantworten. Nein, wir werden nicht weniger von dir denken, wenn du das tust; Nein, Antworten sollten * nicht * in Fragen eingebettet sein. –
Das ist fair @ JeroenMostert. Ich glaube, es war nicht wirklich die Antwort, die ich hören wollte, aber wahrscheinlich die beste Antwort, die ich bekommen werde :) –
Sie sind frei, Ihre eigene Antwort nicht zu akzeptieren, wenn Sie es nicht als zufriedenstellend betrachten. :-) Bounties sind eine weitere Möglichkeit, Aufmerksamkeit zu erregen. –