Frage

ich eine winform (Überwachung) Anwendung erstellt mit VS 2005 (c #), und jetzt habe ich ein Problem, wenn diese Anwendung aus irgendeinem Grund abstürzt, habe ich sicher sein, dass er automatisch neu gestartet wird.

Wie kann ich dieses Problem lösen? (Vielleicht durch Windows-Dienste-Anwendung?)

Danke

War es hilfreich?

Lösung 6

Dank Sie alle, die Lösung, die ich wählen ist: im Hauptprogramm füge ich ein Ausnahmeereignis (UnhandledExceptionEventHandler & ThreadExceptionEventHandler siehe oben) in diesen Ereignissen hat ich das Programm neu starten (auch setzen lügt & E-Mail-Trace-Fehler). Und für den Neustart Problem füge ich Registrierungsschlüssel in [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Run] mit meinem Anwendungspfad sicher sein, dass meine Anwendung wird nach dem Windows-Neustart neu gestartet werden;)

Andere Tipps

Ja, die Schaffung eines Windows Service funktionieren würde, wie Sie es automatisch einstellen neu starten, wenn er abstürzt, aber ein besserer Weg, es in erster Linie Absturz zu verhindern wäre! Gibt es einen bestimmten Grund stürzt?

Mit einer guten Fehlerbehandlung und melden Sie es so schreiben, dass es einfach keine Fehler meldet, die auftreten, und führt auf, was meiner Meinung nach der beste Weg wäre,

gehen

Bedenken Sie:

http://msdn.microsoft.com/en-us/library/ cc303699.aspx

[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
    [MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
    int flags);

Minimum unterstützte Server

Windows Server 2008

http://msdn.microsoft.com/en -US / library / aa373347 (VS.85) aspx

einen Windows-Dienst zu schaffen, ist eine sehr gute Idee für jeden langlaufende Hintergrundprozess aus vielen Gründen, jedoch wieder startet eine abgestürzte Anwendung nicht einer von ihnen ist!

Sie sollten arbeiten, warum die Anwendung abstürzt und verhindern, dass es passiert.

Mit allen Mitteln, auch Ihre Anwendung auf einen Windows-Dienst konvertieren -. Sie viele Vorteile sehen werden, aber die richtige Art und Weise, Ihr Problem zu lösen, ist die Anwendung Absturz in erster Linie zu fixieren

* strong Text * ein Beobachter App. Sie sollten einen Timer auf dem Windows-Dienst und den Code so etwas wie dies in dem Timer-Tick-Ereignisse erstellen:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");

Wenn Sie wirklich kippe etwas über die Crash-Problem tun, würde ich einen Try-Catch anstelle eines Beobachter empfehlen. (Vergessen Sie nicht zu re-throw handled wichtige Ausnahmen)

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }

Da Sie sagen, dass Sie eine Windows Forms-Anwendung verwenden Sie keine Windows-Dienst für das verwenden können, da ein Windows-Dienst nicht erlaubt ist, eine GUI zu haben.

Was ich würde es tun, dass ich eine unsichtbare „Watchdog“ Anwendung erstellen Sie den Prozess, der überwacht und automatisch startet es neu, wenn er abstürzt.

können Sie stellen einen Versuch catch-Block um den Code, der am ehesten den Absturz verursacht wird. Dann schreiben Sie die Ausnahmemeldung in eine Protokolldatei. Sie können auch einen Debug-Punkt in dem catch-Block gesetzt andere Details wie Call-Stack, um zu sehen, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top