Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Monitorare Programma Winforms .NET
martedì 19 febbraio 2008 - 08.54
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Niddu
Profilo
| Newbie
5
messaggi | Data Invio:
mar 19 feb 2008 - 08:54
Salve ragazzi comincio col dire che non ho molta esperienza con le Windows Form.
C'è una applicazione WinForms scritta in vb.net che ha molti problemi di affidabilità, per questo mi è stato chiesto di realizzare un programma esterno al primo che monitorasse l'applicazione in questione, tracciando l'esito(positivo o negativo) ed eventualmente intercettare l'errore che esce fuori da un malfunzionamento.
Ma io non ho proprio idea di come poter intercettare gli eventi di una applicazione scritta in vb.net al di fuori della stessa...ci sono delle librerie apposite? e come si intercettano gli errori che l'applicazione genera?
mi potete guidare?
Ferux
Profilo
| Newbie
44
messaggi | Data Invio:
mar 19 feb 2008 - 11:55
Salve,
potresti utilizzare nell'app VB .Net la classe EventLog del namespace System.Diagnostics e scrivere nel registro eventi.
Poi se vuoi puoi fare un'app che legge il registro eventi o collegarti tu stesso al registro eventi (dal run as eventvwr.msc).
Guarda qui:
http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx
Saluti
Ing Ferux
[MCP MCAD]
Niddu
Profilo
| Newbie
5
messaggi | Data Invio:
mar 19 feb 2008 - 11:59
grazie della risposta.
il mio problema però è che non posso toccare l'applicazione che devo monitorare, quindi devo creare dall'esterno un'altra appliczione che sappia leggere gli eventi della prima appliczione.
leggendo il registro eventi di windows posso intercettare questi errori?
Ferux
Profilo
| Newbie
44
messaggi | Data Invio:
mar 19 feb 2008 - 16:06
Salve,
ovviamente se l'applicazione che non puoi toccare di suo va a scrivere negli registro eventi la risposta è affermativa.
Se invece l'applicazione è una black-box, secondo me puoi sempre leggere il registro eventi nel caso in cui causi errori o generi eccezioni, questo credo lo trovi sotto la voce System del registro eventi o Application.
Comunque tramite la classe Process puoi monitorare il processo che viene lanciato quando avvi la tua applicazione e verifcare se l'occupazione di memoria cresce (Memory Leak) ed altre cosucce.
come riferiemnti puoi guardare:
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/vbcon/html/vbwlkWalkthroughManagingNTProcesses.asp
Spero di esserti stato di aiuto
Saluti
Ing Ferux
[MCP MCAD]
Niddu
Profilo
| Newbie
5
messaggi | Data Invio:
mer 20 feb 2008 - 09:54
seguendo l'indicazione ho cominciato a lavorare con i processi e sta andando bene, nel senso che sono riuscito ad intercettare l'errore e salvarlo quinti ok.
Il problema ora è che io uso il "WaitForExit" del mio processo, ma se non intervengo manualmente sull'altra applicazione chiudendola, il programma rimane appeso, perche quando si genera l'errore non si chiude automaticamente l'appliczione.
Supponendo che io non possa intervenire sull'applicazione che mi da l'errore, come posso chiuderla dopo che la stessa è andata in errore dal programma di monitoraggio dove lancio il processo e aspetto l'uscita dell'applicazione?
grazie
Ferux
Profilo
| Newbie
44
messaggi | Data Invio:
mer 20 feb 2008 - 11:59
Ciao,
devi recuperare l'elenco dei processi tramite la funzione GetProcesses() della classe Process poi quando trovi il processo di interesse utilizzi il metodo Kill():
Saluti
Ing Ferux
[MCP MCAD]
Niddu
Profilo
| Newbie
5
messaggi | Data Invio:
mer 20 feb 2008 - 13:32
Intanto grazie delle risposte.
io sono dell'idea che per monitorare un applicazione sia ideale farlo dall'interno, ma mi è stato chiesto di non toccare il codice di questa applicazione(motivazioni aziendali che non conosco) e di creare un'altra applicazione esterna alla prima che si occupi di monitorare semplicemente se la procedura va a buon fine o se si verificano delle eccezioni, nel qual caso scrivere su un file di log il dettaglio dell'errore.
Ho cominciato a lavorare con i processi di diagnostica, ho lanciato l'applicazione in questione dentro al mio processo e attendo una risposta; il problema è che sia nel caso che vada a buon fine, sia nel caso generi un eccezione l'applicazione di monitoraggio deve aspettare un input da parte dell'utente. vi allego il codice:
Dim Prc As New System.Diagnostics.Process
Dim ProcessStartInfo As New ProcessStartInfo
Prc.StartInfo.UseShellExecute = False
Prc.StartInfo.RedirectStandardError = True
Prc.StartInfo.RedirectStandardInput = True
Prc.StartInfo.RedirectStandardOutput = True
Prc.StartInfo.FileName = "Processo.exe"
Prc.Start()
Prc.WaitForExit()
If Prc.ExitCode <> 0 Then
Dim stdErr As StreamReader = Prc.StandardError
Scrivo l'errore
Else
Dim stdErr As StreamReader = Prc.StandardOutput
Scrivo l'errore
End If
C'è un modo per forzare la chiusura della prima applicazione quando genera un errore senza che l'utente debba dare l'input? perche purtroppo non ho idea di quanto ci possa mettere, e cmq non sempre ci mette lo stesso tempo....
oppure esiste una soluzione analoga seguendo un'altra strada?
Grazie
PS: l'applicazione è un'applicazione Windows Form scritta in vb.net, ma è stata scritta da un non programmatore, quindi non ci sono log o altre cose per evidenziare gli errori internamente.
Niddu
Profilo
| Newbie
5
messaggi | Data Invio:
lun 25 feb 2008 - 16:24
ora vi chiedo un'altra cosa: allo stato attuale con il metodo SendKeys (attraverso la funzione FindWindow di "user32.dll")riesco a intercettare la finestra che appare in caso di errore e simulare il click sul tasto "Fine" per chiudere la finstra di errore. Ma se volessi anche leggere cosa c'è scritto nel messaggio di errore della finestra nella sezione dove c'è il call stack di dove è avvenuto l'errore?
Torna su
Stanze Forum
Elenco Threads
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 !