Prüfen ob Anwendung an ist, wenn nicht starten



  • Hi,
    ich bin rst ein Anfänger bezüglich C++ und noch nicht mit den Ressourcen vertraut, dass dauert ja immer ein wenig.
    Die Boardsche war wenig erfolgreich gewesen.
    Was ich versuche, ist ein simples Programm dass in einer Endlosschleife (mit Verzögerung natürlich) prüft ob ein bestimmtes Programm an ist, und wenn nicht, dann soll es gestartet werden.

    Hintergrund ist, dass ein Programm auf einem Remoterechner so instabill ist, dass es ständig abstürzt und da kein DotNet auf dem Rechner drauf ist, klappts nicht so mit C#.

    Ich muss also wohl sowas wie ein Handle des Programms bekommen, richtig?

    Und dann sowas wie ein shell-exec aufrufen um es zu starten?

    Schwieriger ist der Fall, dass das Programm auch mal einer Windows Meldung bezüglich "musste beendet werden" endet und defakto ja eigentlich noch als Anwendung läuft, schätz ich.
    Kann man irgenwie merken, ob es reagiert oder nicht? Um es dann gewaltsam zu schließen?



  • Den letzten Teil deines Postings verstehe ich nicht.

    Für den Rest kannst du dir ein Handle auf den Prozess holen und dann mit WaitForSingleObject darauf warten, daß der Prozess beendet wird und kannst ihn dann neustarten. Das Handle zum Prozess holst du dir indem du einen Snapshot der laufenden Prozesse machst und dann guckst ob dein Prozess schon dabei ist. Wenn nicht, startest du ihn halt selbst.

    http://msdn2.microsoft.com/en-us/library/ms686701.aspx
    http://msdn2.microsoft.com/en-us/library/ms684320.aspx
    http://msdn2.microsoft.com/en-us/library/ms687032.aspx



  • Danke schön!
    Gleich mal durcharbeiten.

    Der zweite Teil ist ein Problem des Programms, ab und zu kommt halt eine Windows Meldung, sowas wie das -> http://www.univie.ac.at/film/videothek/anleitung/vivi2man-Dateien/image011.jpg

    Und wenn ich mich nicht irre, ist beim Snapshot der Prozesse aber der Prozess noch drin, oder? Er ist ja erst weg, wenn man auf dass Ok der Meldung klickt.

    Hilft mir nur nicht, weil mein C++ programm dass nicht merkt, oder? Kann man prüfen, ob ein prozess noch reagiert?



  • "Programm reagiert nicht mehr" heisst: Die Anwendung hat ne Weile GetMessage()/PeekMessage() etc. nicht mehr aufgerufen.

    Um das festzustellen könnte man z.B. SendMessageTimeout() benutzen und ne Message wie WM_NULL oder sowas hinsenden.



  • Wenn du das Programm ändern kannst welches abstürzt könntest du ggf. einen eigenen Handler für unbehandelte C++ oder SEH Exceptions installieren.
    Der kann dann das Programm beenden ohne diesen dummen Dialog anzuzeigen.

    Eine anderen Möglichkeit wäre ein Programm nebenbei laufen zu lassen welches einfach alle sichtbaren Top-Level Fenster durchgeht, und guckt ob so ein "musste beendet werden" Fenster dabei ist. Wenn es eines findet schickt es einfach ein WM_CLOSE an das Fenster.
    Herauszufinden ob ein Fenster so ein "musste geschlossen werden" Fenster ist ist vermutlich der schwierige Teil - oft geht das aber über die Window-Class, oder über ein paar Child Fenster bekannten Namens und/oder Klasse.

    Ansonsten könntest du noch schauen ob es vielleicht eine Möglichkeit gibt diese Dialoge allgemein zu unterdrücken -- vielleicht irgendwas in der Registry o.ä.



  • Nun, ich bin ein wenig verwirrt, weil der erste Link zu dem Prozess Snapshot eine Fehlermeldung liefert, die ich nicht verstehe:

    Fehler	1	error C2664: 'Interface::printError': Konvertierung des Parameters 1 von 'const char [40]' in 'TCHAR *' nicht möglich
    

    Kennt er TCHAR nicht? Ist ein wenig seltsam.

    (Entschuldigt die Anfängerfrage)



  • Klar kennt er TCHAR, aber vielleicht ist TCHAR ja wchar_t und nicht char?



  • Das mag sein, wobei mir nicht klar ist, wieso es WCHAR sein sollte.

    Ehm, liegt es daran, dass das Programm als c++/cli läuft?



  • Ne Microsoft IDE? - Bei den aktuelleren Versionen ist Unicode standardmässig an (Projekteigenschaften, "General", "Character Set")

    Ansonsten liefert die WinAPI auch Funktionen um zwischen wchar_t und char umzuwandeln.



  • Ja, ist VS2005 Studio


Anmelden zum Antworten