Windows 10: Windows Update beendet Programme oder nicht



  • Hallo,
    ich habe unter W10 ein MFC-Programm (also mit Hauptfenster) und ein Konsolprogramm (auch mit MFC) am Laufen (VC++ 2017). Wenn W10 den Hinweis gibt, wegen installierter Updates den Rechner neu zu starten, dann habe ich (ein für mich) seltsames Verhalten:

    • der Reboot soll durchgeführt werden
    • W10 zeigt die Liste der aktiven Programme an, u.a. sind meine beiden Programme in der Liste aufgeführt
    • das Konsolprogramm (mit MFC) wird nach wenigen Sekunden beendet
    • beim Programm mit Hauptfenster beschwert sich W10, dass das Programm den Neustart verhindern würde.

    Kann mir jemand erklären, was ich machen muss, damit das Konsol-Programm nicht einfach abgeschossen wird, bzw. welche Nachrichten W10 an die Programme sendet? WM_ENDSESSION? Aber wie fange ich so eine Message in einem Konsolfenster ab?

    Ich hab keine Ahnung, weder warum das Konsolprogramm beendet wird noch warum das MFC Programm den Neustart verhindern soll.
    Im Konsolprogramm habe ich per "SetConsoleCtrlHandler" einen Handler, in dem ich Ctrl-C, Ctrl-Break usw. protokolliere. Normalerweise klappt das, im angeführten Fall aber eben nicht: null Protokollierung, es scheint, als ob das Programm einfach "abgeschossen" wird.



  • Ich vermute mal, das so was passiert:
    Die MFC Anwendung hat ein eigenes Fenster und bekommt damit eine eigene Message Queue. In diese wird vor dem Neustart eine WM_QUERYENDSESSION Nachricht gepostet, auf die deine Anwendung nicht reagiert und damit auch kein OK für den Neustart gibt -> Meldung, dass die Anwendung den Neustart verhindert.
    Die Konsolenanwendung hat keine eigene Message Queue, und wird daher einfach beendet.

    Hier der Link zu WM_QUERYENDSESSION



  • Hallo und Danke!

    Ich hab jetzt mal lt. https://docs.microsoft.com/de-de/windows/console/setconsolectrlhandler ein unsichtbares Fenster erstellt und dort das WM_ENDSESSION und WM_QUERYENDSESSION "abgefangen".
    Wenn ich per SendMessage obige Meldungen an das Fenster schicke, dann werden die Handler aufgerufen (ich mache einen Breakpoint darauf und protokolliere auch in eine Datei).

    Wenn ich das Programm aber alleine laufen lasse und ich melde mich ab oder starte den Rechner neu, dann werden keine Log-Einträge erzeugt. Ich gehe mal davon aus, dass die Handler nicht aufgerufen werden bzw. dass das WM_ENDSESSION nicht gesendet wird.

    So wie es aussieht wird das Programm einfach "abgeschossen".

    Hat keiner einen weiteren Tipp / Idee, was ich falsch machen könnte?



  • @dadidag

    Protokollier´ doch einfach mal alle Fensternachrichten in eine Textdatei und guck dir an, was im Ernstfall bei deiner Anwendung ankommt. Eventuell musste die filtern, damit nicht zu viel Ballast geschrieben wird.