Laden...

Anwendung neustarten bei AppCrash oder "Keine Rückmeldung"

Erstellt von MalteS vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.293 Views
M
MalteS Themenstarter:in
8 Beiträge seit 2009
vor 11 Jahren
Anwendung neustarten bei AppCrash oder "Keine Rückmeldung"

Hallo liebe Community,

ich arbeite derzeit an einer Visualiserung für eine SPS. Die Visu ist eine WPF Anwendung in CSharp die über ADS mit der SPS kommuniziert.

IDE: VS2008
.Net: 3.5
OS: WES7 oder WES XP

Nun kann es ja durchaus mal vorkommen, dass sich die WPF Anwendung aufhängt oder abstürzt. Dies beeinträchtigt ja nicht zwangsläufig die SPS Steuerung. Wenn die SPS also noch ihre Arbeiten ganz normal weiterführt, möchte ich die WPF Anwendung einfach neu starten, so dass ein bedienen der Steuerung wieder möglich ist.

Welche Möglichkeiten habe ich also, um die WPF Anwendung wieder ans Laufen zu bekommen?

Beste Grüße,
Malte

S
753 Beiträge seit 2006
vor 11 Jahren

Denkbare wäre ein Hintergrundprozess, der prüft, ob die Zielanwendung reagiert. Wenn sie es nicht mehr tut, spawnst du diese neu.

Prüfen, ob eine Anwendung noch reagiert geht mit der Google-Suche leicht zu finden. z.B Ermitteln, ob ein Prozess reagiert

Life is a short

C
258 Beiträge seit 2011
vor 11 Jahren

Nun kann es ja durchaus mal vorkommen, dass sich die WPF Anwendung aufhängt oder abstürzt.

Ich finde den Ansatz nicht besonders benutzerfreundlich.
Ein Ordentliches und Sinngemäßes Exceptionhandling quer durch die Applikation sollte einen Großteil der Abstürze verhindern und richtig mit dem aufgetretenen Fehler umgehen.

Wenn du dich an die Microsoft Richtlinie hältst und alle Aktionen die länger als 20ms dauern in einen separaten Thread packst, wird es auch so gut wie niemals dazu kommen das dein GUI Thread sich aufhängt. Somit tretten viele dieser aufhänger nicht im GUI Thread auf und du kannst nicht überprüfen ob die Applikation noch reagiert.

Gegen Deadlocks, Endlosschleifen und Race-Conditions hilft nur ausgiebiges Testen und eine gut durchdachte Synchronisation zwischen Threads usw..

Du kannst natürlich für den WorstCase über die Main methode einen TryCatch block packen der alles auffängt was nicht bedacht wurde, und an dieser stelle die Application neu starten. Jedoch sollte das nicht die Regel sein.

BTW Ich kenne den Einstigspunkt bei WPF nicht wird sich von WinForms unterscheiden.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo MalteS,

üblicherweise braucht man ==> Watchdogs nur für Hintergrundprozesse. Bei Anwendungen, die von einem Benutzer bedient werden, ist es üblich, diesem das (Abbrechen und) Neustarten zu überlassen. Wenn du dich an die Ratschläge von Console32 hältst, sollte es so selten vorkommen, dass der Benutzer nicht genervt ist.

herbivore

M
MalteS Themenstarter:in
8 Beiträge seit 2009
vor 11 Jahren

Grundsätzlich gebe ich euch Recht.
In dieser Situation ist nun leider nicht so, dass es sich um irgendeine normale Anwendung, Handy App oder Webseite handelt. Die Visu wird in der industriellen Automatisierung eingesetzt, was ein hohes Maß an Zuverlässigkeit und Verfügbarkeit voraussetzt.

Durch den automatischen Neustart der Visu will ich ja auch nicht einfach nur etwas schlampiger programmieren können, es soll halt nur eine Lösung für das Worst-Case-Szenario sein.

16.842 Beiträge seit 2008
vor 11 Jahren

Dort solltest Du erst recht absolut jeden Fehler fangen. Ohne Ausnahme.
Dahingehend kannst Du etwaige Fehler automatisch korrigieren, den Benutzer eine Auswahl überlassen oder eben dann die Anwendung beenden.

Eine Trennung der beiden lässt sich über einen Dienst sehr einfach realisieren.
Sprich: einen WCF Dienst, der mit der SPS spricht und eine WPF Anwendung, die mit dem Dienst spricht.
Sollte die WPF-Anwendung abstürzen betrifft das den Dienst nicht. Einfach WPF-Anwendung neu starten, neue Verbindung zum Dienst und fertig.