Intercettare Crash processi

lunedì 13 agosto 2012 - 17.09
Tag Elenco Tags  VB.NET  |  .NET 2.0

mmjc23 Profilo | Newbie

Buona sera a tutti

Vorrei, sviluppare un applicativo che mi esegua uno o più processi ".exe" e che mi consenta, qualora venissero chiusi o si verifichi un crash di riavviare quel processo.

Ho quindi utilizzato la classe process come di seguito
Dim pr as New Process pr.StartInfo.FileName = Config.AppPath pr.StartInfo.UseShellExecute = False pr.StartInfo.ErrorDialog = False pr.StartInfo.RedirectStandardError = True AddHandler pr.ErrorDataReceived, AddressOf pr_ErrorDataReceived pr.Start() pr.BeginErrorReadLine() AddHandler pr.Exited, AddressOf pr_Exited pr.EnableRaisingEvents = True
In questo modo e tramite la gestione degli eventi Exited e ErrorDataReceived, riesco ad avviare il processo e monitorare quando viene chiuso.
Nel caso però in cui il processo eseguito vada in crash, e viene quindi visualizzata la classica finestra di windows di eccezione non gestita o di invio a Microsoft, non viene scatenato alcun evento e la proprietà "Responding" del processo, restituisce comunque "True". In questa situazione, all'applicazione di monitoring sembra tutto a posto mentre non lo è affatto.
Ho cercato quindi Online, e sembra che sia necessario utilizzare la funzione "SetErrorMode" per impedire la visualizzazione dei messaggi di Crash.
Ho implementato quindi la gestione di SetErrorMode, ma la finestra di errore, viene visualizzata comunque.
Continuando la ricerca Online, qualcuno, diceva che la SetErrorMode, in realtà, viene utilizzata nella funzione stessa ma non applicata ai processi "Figlio" che vengono creati.
Queste persone, dicevano di aver risolto implementando una classe che applicasse la SetErrorMode all'interno di un blocco Using; ma il risultato non cambia.
Qualche idea?

Classe che esegue il SetErrorMode:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Utilizzo della classe:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
GRAZIE!

P.S. Ovviamente, è una applicazione di controllo processi generici, quindi, è logico che "non è possibile" implementare una gestione degli errori corretta all'interno del processo da controllare
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5