Question

Je créé un WinForm (suivi) application à l'aide VS 2005 (c #), et maintenant, j'ai un problème lorsque cette application se bloque pour une raison quelconque, je dois être sûr qu'il redémarre automatiquement.

Comment puis-je résoudre ce problème? (Peut-être en utilisant l'application de services Windows?)

Merci

Était-ce utile?

La solution 6

Merci vous tous, la solution que je choisis est: dans le programme principal ajouter un événement d'exception (UnhandledExceptionEventHandler & ThreadExceptionEventHandler voir ci-dessus) dans ces événements, je redémarrer le programme (également mettre journal et email à des erreurs de trace). Et le problème de redémarrage ajouter la clé de Registre dans [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run] avec mon chemin d'application pour être sûr que ma demande sera redémarré après le redémarrage de Windows;)

Autres conseils

Oui, une création d'un service Windows fonctionnerait comme vous pouvez le configurer pour redémarrer automatiquement si elle tombe en panne, mais une meilleure façon serait de l'empêcher de s'écraser en premier lieu! Y at-il une raison spécifique, il se bloque?

Avec une bonne gestion des erreurs et vous pouvez écrire des rapports afin qu'il signale simplement des erreurs qui se produisent et se poursuit, ce qui à mon humble avis serait le meilleur itinéraire pour aller

Considérez ceci:

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

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

serveur minimale prise en charge

Windows Server 2008

http://msdn.microsoft.com/en -us / bibliothèque / aa373347 (VS.85) .aspx

Création d'un service Windows est une très bonne idée pour tout processus d'arrière-plan de longue durée pour de nombreuses raisons, mais re-démarrage d'une écrasements application n'est pas un d'entre eux!

Vous devriez comprendre pourquoi l'application se bloque et l'empêcher de se produire.

Par tous les moyens, aussi convertir votre application à un service Windows -. Vous verrez de nombreux avantages, mais la bonne façon de résoudre votre problème est de résoudre le plantage de l'application en premier lieu

Pour * texte fort * une application Watcher. Vous devez créer une minuterie sur le service Windows et le code quelque chose comme ceci dans l'événement timer tick:

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

si vous ne pouvez vraiment pas faire quoi que ce soit sur le problème plantage je recommande un try-catch au lieu d'un veilleur. (Ne pas oublier de re-jet géré des exceptions)

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

Puisque vous dites que vous utilisez une application Windows Forms vous ne pouvez pas utiliser un service Windows pour cela, car un service Windows n'est pas permis d'avoir une interface graphique.

Qu'est-ce que je le ferais que je créerais une invisible application « chien de garde » qui surveille le processus et redémarre automatiquement quand il se bloque.

Vous pouvez mettre un bloc catch try autour du code qui est le plus probablement à l'origine du crash. Ensuite, écrivez le message d'exception à un fichier journal. Vous pouvez également définir un point de débogage dans le bloc catch pour voir d'autres détails comme la pile d'appels, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top