O que poderia fazer com que um aplicativo .NET WinForms seja fechado sem uma caixa de diálogo?

Nosso aplicativo WinForms foi relatado para ocasionalmente apenas fechar por conta própria. Ele não mostra o nosso próprio diálogo de envio de erro de falha nem a caixa de diálogo de envio de erro do Windows, ele apenas fecha e desaparece, geralmente quando a pessoa estava afk e não fazia nada com o aplicativo. Parece ser uma ocorrência quase rara, talvez de 2 a 3 vezes por mês, e aconteceu com mais de uma pessoa. Não tenho idéia de por onde começar a obtenção de um caso de reprojeto ou por onde começar a rastreá-lo.

C # .NET 2.0 Casos reportados estão no Win XP

Alguém tem alguma ideia?

3

3 Respostas

Os estouros de pilha devido à recursão infinita são uma grande causa da desativação de aplicativos sem aviso prévio. A menos que você tenha feito algo deliberado para causar uma saída silenciosa, as exceções não tratadas (além do estouro de pilha) normalmente exibirão algum tipo de interface do usuário antes do encerramento do aplicativo. O estouro de pilha é a exceção mais comum (oops, desculpe) a essa regra.

É claro que, a partir de código não gerenciado ou não seguro, é quase certamente possível perturbar o tempo de execução da maneira certa para causar uma saída silenciosa.

As sugestões sobre instrumentação e olhando para o log de eventos do Windows também são boas.

4
adicionado
Parece que é mais provável que um acidente silencioso seja o culpado. obrigado
adicionado o autor Davy8, fonte

Exceções farão com que um aplicativo "desapareça". Verifique os logs de eventos para ver se havia alguma coisa lá.

Verifique o gerenciador de tarefas para ver se o processo ainda está presente quando a janela desaparecer. Eu tive a falha do explorador e não redesenhei a janela até que fosse Alt-Tabbed ou Switched-To (do gerenciador de tarefas).

Não o coloque além dos usuários para convenientemente esquecer que eles estão fechando o aplicativo. Você pode querer colocar alguma lógica de registro no aplicativo para registrar encerramentos iniciados pelo usuário. Da próxima vez que "desaparecer", você poderá verificar se há entradas de registro.

3
adicionado
O aplicativo ainda não está na moda, então conheço bem esses usuários para confiar que eles não fecharam o aplicativo por conta própria (isso acontece com muita frequência para um esquecimento conveniente)
adicionado o autor Davy8, fonte
Além disso, o aplicativo não cria uma nova instância se já houver outro processo e eles puderam reabrir o aplicativo. Por isso, ele realmente travou silenciosamente, mas, em geral, isso é bom para verificar.
adicionado o autor Davy8, fonte

Você poderia adicionar alguma lógica no evento FormClosing para perguntar ao usuário se isso é o que eles realmente querem fazer, você pode cancelar o evento de fechamento e seu aplicativo continuará sendo executado se tudo estiver bem. Se você continuar percebendo esse problema e ele nunca realizar sua lógica, você terá que sujar as mãos no depurador.

0
adicionado