Auf Logoff und Shutdown reagieren?



  • Hallo zusammen,

    ich habe eine simple WinApi Applikation die Nach dem "Erkennen" eines Logoff- bzw. Shutdown-Events noch etwas machen soll, aber ich bekomme es irgendwie nicht hin:

    Also in der WinMain passiert noch nicht viel, ich Setze die Handler Routine mit SetConsoleCtrlHandler und die liefert auch True zurück.

    Ich erzeuge mir vorher noch ein Event, das ich bei shutdown/logoff selber auf signaled setzen möchte. dann warte ich einfach darauf:

    BOOL WINAPI ShutDownHandler(DWORD dwCtrlType)
    {
        if((dwCtrlType == CTRL_LOGOFF_EVENT) || (dwCtrlType == CTRL_SHUTDOWN_EVENT))
        {
            // Mach was!
            if (hShutDownEvent) SetEvent(hShutDownEvent);
            return TRUE;
        }
        return FALSE;
    }
    
    WinMain(...)
    {
        SetConsoleCtrlHandler(ShutDownHandler, TRUE);
        hShutDownEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
        DWORD waitResult = WaitForSingleObject(hShutDownEvent, INFINITE);
    
        return 0;
    }
    

    Es sieht so aus, als ob die Anwendung zwar bei WaitForSingleObject stehen bleibt, aber dann eben auch nicht mehr durch die HandlerRoutine geht 😞

    Also mal anders erklärt: Ziel der ganzen Aktion ist: Mein "Service" soll sich erst bei einem Logoff/Shutdown beenden, wie mach ich das am besten?

    Hat jemand ein Tip?
    Gruß,
    mathi



  • Ist das überhaupt ne Konsolenanwendung? Sieht ja nicht danach aus wegen WinMain...



  • Ach verflixt! 😞 Ich war so Happy endlich was gefunden zu haben, das ich das mit der Konsolen Anwendung glatt verpeilt habe. Ist natürlich keine Konsolen Anwendung.

    Wie würde ich denn von einer WinApi Anwendung auf loggof oder shutdown reagieren?

    Gruß,
    mathi



  • Shutdown Notification

    Applications with a window and message queue receive shutdown notification through the WM_QUERYENDSESSION message, unless you call ExitWindowsEx with the EXW_FORCE flag. The applications perform any cleanup while processing WM_QUERYENDSESSION, and return TRUE to indicate that they can be terminated. If you use EXW_FORCE, applications may lose data.



  • Programmiere doch besser einen echten Dienst.



  • w schrieb:

    Programmiere doch besser einen echten Dienst.

    Gibst du mir bitte ein Hinweis, wo ich am besten damit anfange? Ich meine gibts dafür Tutorials?

    @,,,,,,,: Danke, aber ich habe keine Fenster, also acuh keine MessageProg 😞
    Na Ok, wenns nich anders geht, bastel ich eben noch ein Fenster rein, im ernstfall

    Besten Dank soweit!
    Gruß,
    mathi


  • Mod

    Wie immer mal einfach bei Codeproject schnuppern und siehe da:
    http://www.codeproject.com/system/serviceskeleton.asp


Anmelden zum Antworten