Pergunta

Criei um aplicativo Winform (Monitoramento) usando o VS 2005 (C#) e agora tenho um problema quando esse aplicativo trava por algum motivo, tenho que ter certeza de que ele será reiniciado automaticamente.

Como posso resolver isto? (Talvez usando o aplicativo Windows Services?)

Obrigado

Foi útil?

Solução 6

Obrigado a todos, a solução que escolho é: No programa principal, adiciono eventos de exceção (UNHLEDLEEXCECCEIÇÃO EMPRESSÃO E THINECCECCIONSEVENTHANDLER Veja acima) nesses eventos, reinicio o programa (também colocando log e email para rastrear erros). E para o problema de reinicialização, adiciono a chave do registro em [hkey_local_machine software microsoft windows currentVersion run] com o caminho do meu aplicativo para garantir que meu aplicativo seja reiniciado após a reinicialização do Windows;)

Outras dicas

Sim, uma criação de um Serviço do Windows Funcionaria como você pode configurá -lo para reiniciar automaticamente se travar, mas uma maneira melhor seria impedir que ele trave em primeiro lugar! Existe uma razão específica pela qual trava?

Com um bom tratamento de erros e relatórios, você pode escrevê -lo para que ele simplesmente relate quaisquer erros que ocorram e continuem, o que o IMHO seria o melhor caminho a seguir

Considere isto:

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

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

Servidor mínimo suportado

Windows Server 2008

http://msdn.microsoft.com/en-us/library/aa373347(vs.85).aspx

Criar um serviço do Windows é uma ideia muito boa para qualquer processo de fundo de longa duração por muitos motivos, No entanto, reiniciar um aplicativo acidentado não é um deles!

Você deve descobrir por que o aplicativo está travando e impedir que isso aconteça.

Por todos os meios, converta também seu aplicativo em um serviço do Windows - você verá muitos benefícios, no entanto, a maneira correta de resolver seu problema é corrigir a falha do aplicativo em primeiro lugar.

Por*texto forte* um aplicativo de observador. Você deve criar um cronômetro no serviço do Windows e codificar algo assim no evento Tick Tick:

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

Se você realmente não pode fazer nada sobre o problema do acidente, eu recomendaria uma pega de viagem em vez de um observador. (Não se esqueça de re-lidar com grandes exceções)

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

Como você diz que usa um aplicativo Windows Forms, não pode usar um serviço do Windows para isso, pois um serviço do Windows não tem permissão para ter uma GUI.

O que eu faria e criaria um aplicativo "Watchdog" invisível que monitora o processo e o reinicie automaticamente quando trava.

Você pode experimentar o bloco de captura em torno do código que provavelmente está causando o acidente. Em seguida, escreva a mensagem de exceção em um arquivo de log. Você também pode definir um ponto de depuração no bloco de captura para ver outros detalhes, como pilha de chamadas, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top