windows kill befehl empfangen und hinauszögern



  • moin

    folgendes problem: ich beende meine software über power saving network wenn im netzwerk ein bestimmter rechner vom netz geht, das ist so gewollt und nicht veränderbar ... leider schiesst psn mein c programm per kill befehl ab und lässt mir ca 2-3 sec zum schliessen (event bekomm ich über queryendsession) ich benötige aber ca 5-10sec zum beenden ...

    wie kann ich also die zeit die windows mir gibt verlängern um mein programm ordnungsgemäss zu beenden?

    habs schon mitvextra threads versucht, ohne erfolg

    bitte um eure hilfe
    lg lt



  • Kann man soweit ich weiss irgendwo in der Registry einstellen.


  • Mod

    Ist das ein Service oder ein normales Programm?



  • moin martin,

    is nen normales c++ programm...
    und ich hab in nem anderen forum erfahren das man unter
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control -> WaitToKillServiceTimeout
    sein soll ...

    ich hab jetzt einfach mal spontan bei meinem pc nachgeguckt und da is das auf 20000 eingestellt ... das hiese ja das es standartmässig auf 20 sec eingestellt ist ... das is aber meines erachtens unlogisch da ich ja festgestellt hab das der rechner auf dem ich das anwenden will meine appikation viel früher abschiesst ... die frage is als: was bedeutet dieser eintrag ?

    sind es 20 sec bis er überhaupt den befehl an ein programm schickt um dem dann nur ganz wenig zeit zum schliessen zu lassen oder wie ?

    oder frag ich das falsche event ab ?

    also ich brauche irgendwie ne möglichkeit um mitzubekommen das powersaving network dem rechner sagt: jetzt runter fahren -> dann benötige ich etwas zeit (5-10 sec) und dann ist mein programm beendet und der rechner darf runter fahren ...

    oder gibt es ne möglichkeit per kommandozeile (batch datei irgendsowas) dem programm nen befehl zukommen zu lassen ... so nach dem motto: psn ruft ne batchdatei auf die meinem programm sagt: jetzt fahr dich runter -> mein programm beendet sich normal und als letztes sagt mein programm dem pc -> jetzt fahr dich runter ...

    also ka hab mehrere ideen was man da machen könnte nur die umsetzung fällt mir kein einfacher weg ein ... also pls help ...

    thx LT


  • Mod

    Dieser Eintrag in der Registry funktioniert nur für Services.

    Über Usermode Programme führt aööeine die Shell Regie.

    Ich verstehe nicht, was Du da eigentlich machst.
    Wie reagierst Du denn auf WM_QUERYENDSESSION?
    ZUdem ist das nciht die letzte Nachricht. WM_ENDSESSION kommt ja auch noch.

    Weiterhin hat sich hier das Shutdown Verhalten von Windows extrem geändert.
    http://blog.m-ri.de/index.php/2007/03/26/vista-beendet-programme-auch-wenn-wm_queryendsession-false-returniert/
    Siehe auch die Links dort.



  • ok hab mich auf meinen kollegen verlassen der meinte queryendsession wäre die richtige wm_msg...

    okdann von vorn:

    winxp auf 7 rechnern + 8. rechner der über ein notausschalter ausgeschaltet wird

    auf den 7 pcs wo meine software läuft ist eine software installiert (power saving network) dieses programm pingt den 8. rechner und sobald dieser nicht mehr da ist kann man vordefinieren was dann passiert (derzeit: fahr dich runter)

    bei diesem runter fahren wird mein programm was auf den 7 rechnern läuft einfach hart geschlossen ... dies ist unschön da produktionsdaten dadruch verloren gehen ... diese müssebn vorher in eine oracle datenbank geschrieben werden ... dafür (da es recht viele daten sind) benötige ich einige sekunden ...

    leider reicht die zeit vom empfangen der wm_msg bis zum harten beenden meiner software nicht aus ... daher muss ich das irgendwie verlängern ...

    möglichkeit 1) ich breche das herrunter fahren ab und beende meine software und starte das herrunterfahren des pcs von meiner software aus wenn ich sicher bin das die daten richtig in der db stehen

    zu möglichkeit 1: hier weis ich nicht wie ich überhaupt ran gehn soll. hab sowas noch nie gemacht von daher auch etwas ratlos wie ich da anfangen soll ...

    möglichkeit 2) ich verzögere das herrunter fahren solange, das ich mir sicher sein kann das die software alles gespeichert hat ...

    zu möglichkeit 2: hier weis ich nicht wie ich die zeit verlängern kann ... das was ich bisher zu dem thema gelesen hab trifft auch nicht den punkt den ich benötige ...

    also brauche daher deine hilfe bzw eure 🙂

    mfg LT


  • Mod

    Wie fährst Du den herunter? Etwa mit der Force Methode?

    Ich denke, Du solltest eine Vernünftige Kommunikation zwischen Deinen Programmteilen einbauen, die sich entsprechende "Absprechen" was geschehen soll, und was wann geschieht.



  • moin martin,

    das würd ich ja gern, aber power saving network ist ein externes programm was von dem kunden überall eingesetzt wird und ich da leider nix gegen machen kann ...

    wie genau dieses tool die rechner runter fährt ist mir nicht bekannt ...
    man kann dort nur einstellen : runter fahren / neu starten / externes programm aufrufen ....

    aber der kunde will kein externes programm ...

    also kann ich da leider nix gegen machen und muss einfach sehn wie ich mit den gegebenheiten umgeh...

    mfg LT



  • ok problem gelöst ...

    onqueryendsession geht für mein programm doch ...
    problem war nur das ich teile in onappexit und andere teile in exitinstance gemacht hab ... onappexit hat er bis zum schluss ausgeführt ... exitinstance nicht ... und das war mein problem ...

    hab die funktionen aus exitinstance in onappexit gepackt so geht es ...


Anmelden zum Antworten