Gibt es einen sicheren Weg Programme ohne Nachfragen sauber zu beenden?



  • Guten Tag

    Ich möchte bei einem Programm die Funktion hinzufügen dass nach einer gewissen Zeit der Inaktivität gewisse Programme geschlossen werden sollen.

    Unter anderem alle Office-Programme & der Internet Explorer.
    Dabei sollen die Programme ohne weitere Nachfragen geschlossen werden.

    Gibt es da einen sicheren Weg dies zu erledigen oder muss ich erst an alle Programme über PostMessage ein WM_CLOSE schicken und danach alle "Nachfragefenster" seperat behandeln?

    Ich will nicht wild herumterminieren da diese Funktion einmal in der Stunde und das 24/7 ausgeführt wird.





  • Er will die Programme sauber beenden.

    @-Bernhard-
    Nein, so eine Funktion gibt es unter Windows einfach nicht.
    Du kannst mit WM_CLOSE etc. rumfummeln, oder du kannst mit TerminateProcess draufhauen. Beides nicht sauber.



  • hustbaer schrieb:

    Du kannst mit WM_CLOSE etc. rumfummeln, oder du kannst mit TerminateProcess draufhauen. Beides nicht sauber.

    Und das soll jetzt besser als die WMI Lösung sein? Was konsumierst Du denn für Substanzen?


  • Mod

    Mox schrieb:

    hustbaer schrieb:

    Du kannst mit WM_CLOSE etc. rumfummeln, oder du kannst mit TerminateProcess draufhauen. Beides nicht sauber.

    Und das soll jetzt besser als die WMI Lösung sein? Was konsumierst Du denn für Substanzen?

    Er hat doch recht.
    TerminateProcess aus dem WMI zu verwenden ist so etwa wie das verwenden einer Bazooka als Haustürschlüssel. Ja es geht... aber... 😉

    Wenn WM_CLOSE... wenn überhaupt.



  • Gibt es eine eine Herangehensweise die besser geeignet ist als WM_CLOSE zu posten?

    Ich muss alles vermeiden was auch nur ansatzweise an einen Holzhammer erinnert.
    Der Rechner kann maximal einmal im Monat (beim Patchday) neu gestartet werden.

    Ich möchte aber trotdem das System automatisch zusammenräumen können wenn die Benutzer wieder unzählige Programme laufen lassen wenn sie gehen.


  • Mod

    Es gibt nichts Besseres als WM_CLOSE.



  • Mox schrieb:

    hustbaer schrieb:

    Du kannst mit WM_CLOSE etc. rumfummeln, oder du kannst mit TerminateProcess draufhauen. Beides nicht sauber.

    Und das soll jetzt besser als die WMI Lösung sein? Was konsumierst Du denn für Substanzen?

    Du musst lesen lernen und weniger trinken.

    Ich hab geschrieben dass es keine saubere Lösung unter Windows gibt.
    Ich hab' nicht geschrieben dass deine Version schlechter wäre als die von mir genannten Mittel. Genaugenommen hab ich nichtmal empfohlen/vorgeschlagen diese zu verwenden, sondern bloss darauf hingewiesen dass das im Endeffekt die einzigen zwei Wege sind.

    Man kann also entweder mit dem Hammer draufhauen (TerminateProcess) oder versuchen "freundlich" ein WM_CLOSE zu posten. Beides kann zu Problemen führen, beides ist nicht sauber.

    Die von dir vorgeschlagene WMI Funktion versucht da schlau dran zu gehen, aber auch sie kann nicht garantieren dass der Prozess sauber und ohne Probleme zu verursachen beendet werden kann. Denn auch sie kann im Endeffekt nicht wirklich mehr tun als zu versuchen den Prozess über "freundliche Anregungen" ala WM_CLOSE dazu zu bringen sich selbst zu beenden. Und dann letztenendes, wenn es "freundlich" halt einfach nicht funktioniert, mit TerminateProcess draufzuhauen.
    Das blöde dabei ist nur dass bestimmte "eigenwillige" Programme auch "eigenwillig" darauf reagieren können wenn man versucht ihnen ein WM_CLOSE zu schicken. Und dann u.U. etwas tun was der Anwender gar nicht wollte.

    Darum ging es mir.

    Jetzt verstanden?



  • hustbaer schrieb:

    Die von dir vorgeschlagene WMI Funktion versucht da schlau dran zu gehen,

    Genau deswegen habe ich das doch vorgeschlagen! Es wird versucht, den möglichst saubersten Weg zu gehen. Einfacher und besser geht doch gar nicht!

    Aber natürlich, es geht auch der lange Weg: How To Terminate an Application "Cleanly" in Win32



  • Ja, du magst den saubersten (einfachen) Weg vorgeschlagen haben.

    Ich wollte nur darauf hinweisen dass auch dieser sauberste Weg nicht sauber ist, weil das unter Windows einfach nicht geht.

    Weil es unter Windows leider keinen standardisierten und ausreichend breit supporteten Mechanismus gibt über dem man einem Programm "beende dich bitte" mitteilen könnte.
    (Ich weiss nichtmal ob es überhaupt irgend einen standardisierten Mechanismus gibt. Für "bitte beenden wegen Shutdown/Logout" gibt es sowas, aber für einfach nur "bitte beenden" ist mir zumindest nichts bekannt.)



  • Wie will am auch ein Proramm sauber beenden, das vorher nachfragt: "Und willste deine Änderungen auch speichern?" ja/nein oder "Sollen die Änderungen verworfen werden?" ja/nein in einem Fall muss man ja im anderen nein Antworten um das gleiche Ergebniss zu erhalten.
    Erscheint mir nicht trivial.


  • Mod

    unnamedplayer schrieb:

    Wie will am auch ein Proramm sauber beenden, das vorher nachfragt: "Und willste deine Änderungen auch speichern?" ja/nein oder "Sollen die Änderungen verworfen werden?" ja/nein in einem Fall muss man ja im anderen nein Antworten um das gleiche Ergebniss zu erhalten.
    Erscheint mir nicht trivial.

    Man kann zumindest den vorgeschlagenen Default Schalter wählen. Problematischer ist es aber, wenn dann ein Speichern unter Dialog auftaucht (bei neuen Dateien) was dann.

    Dämlich sind auch solche Fragen wie. "Soll das Programm wirklich beendet werden?" Hier ist oft "Nein" vorbelegt.



  • Hallo

    Bei den Office Produkten gebe es noch die Möglichkeit sie via COM-Schnittstelle anzusprechen, darüber dann die Nachfragedialoge abschalten und mit der Funktion Quit() die Applikationen sauber schließen.

    Ansonsten wüsste ich auch nicht das es ein beenden für Shutdown gibt, alleine wenn ich bei mir sehe das der Shutdown auf ein Excel wartet weil dieses noch nicht gespeichert ist.

    Mfg Marco



  • Marc-O schrieb:

    Ansonsten wüsste ich auch nicht das es ein beenden für Shutdown gibt,

    Macht nix, du musst nicht alles wissen


  • Mod

    Marc-O schrieb:

    Ansonsten wüsste ich auch nicht das es ein beenden für Shutdown gibt, alleine wenn ich bei mir sehe das der Shutdown auf ein Excel wartet weil dieses noch nicht gespeichert ist.

    Das hängt von den Flags ab... wenn der Shutdown ein System Befehl mit Force ist, schert den das überhaupt nicht.



  • hm. Man könnte aber sicher ein Äffchen darauf trainieren und davorsetzten 💡



  • @Swordfish:
    Hast du eine Ahnung wie hoch die Bananenpreise heutzutage sind?

    @All:
    Danke für eure Tipps.
    Dann werde ich eben für jedes Programm eine eigene Beenden-Routiene schreiben müssen.

    Das ist immer noch besser als mich regelmäßig per Fernwartung auf den Rechner aufzuschalten und alles händisch zu beenden.


Anmelden zum Antworten