Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [Vb.NET] Capire se un programma ha smesso di funzionare e in tal caso chiuderlo

    Buongiorno, ho sviluppato un programma di monitoraggio che interroga costantemente un database per eseguire l'aggiornamento, quasi in tempo reale, dei suoi grafici. Le istruzioni per l'aggiornamento dei grafici sono contenute in un blocco Try impostato per gestire tutte le eccezioni, ma nonostante questo, in casi rari, appaiono delle eccezioni non gestite ed il programma smette di funzionare, e' possibile fare in modo, utilizzando un secondo programma, che in casi come questo venga chiuso completamente il programma invece di restare bloccato con l'errore visualizzato sullo schermo?
    Quello che avrei bisogno di ottenere e' un programma che controlli se il programma di monitoraggio stia funzionando, e nel caso smetta di funzionare lo chiuda automaticamente per poi riavviarlo.
    Potrebbe sembrare inutile riavviarlo, ma nel mio caso no, in quanto le eccezioni si verificano solo in particolari condizioni, nel database i dati restano integri e leggerli nuovamente non genera errori.
    Il mio problema e' che essendo un programma che deve essere usato in una catena di produzione, non dovrebbe richiedere alcuna interazione.
    Ultima modifica di Cavaliere Nero; 17-12-2016 a 14:19

  2. #2
    Le eccezioni non gestite.... le puoi gestire in ApplicationEvents.vb:

    Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As _
    Microsoft.VisualBasic.ApplicationServices.Unhandle dExceptionEventArgs) Handles Me.UnhandledException

    '...... codice...........

    End Sub

  3. #3
    Ho implementato un riavvio automatico nell'evento che mi hai indicato, sto effettuando dei test per vedere se la cosa funziona a dovere, ti ringrazio per la preziosa informazione!

  4. #4

  5. #5
    La cosa in sé funziona, ma purtroppo non ha risolto il problema, l'applicazione smette ancora di funzionare misteriosamente, avevo anche aggiunto che venisse indicato in un file di log che si è verificata un'eccezione non gestita, ma nel log nel c'è nulla... ne deduco che il problema non si verifica nel mio codice, qualcosa spinge Windows a chiudermi l'applicazione mi sa; a livello di codice come potrei intercettare un'applicazione che ha smesso di funzionare?

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Guarda negli eventi di windows.

  7. #7
    Bisogna vedere cosa intendi per: "Smette di funzionare". Se smette ma resta "aperta" con un qualche messaggio di errore il controllo è un attimino più complicato, anche se fattibile.

    Se invece si chiude proprio... basta una seconda piccola applicazione lanciata "in tandem" con la prima che con un timer controlla regolarmente in "Process.GetProcessesByName" se l' applicazione principale è aperta o no, e nel caso la lancia "again and again".

    Io cmq metterei TUTTO il codice, Sub per Sub, Function per Function, in Try... Catch... è alquanto strano che gli errori non vengano rilevati.
    Ultima modifica di eziogsv; 22-12-2016 a 23:56

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da Cavaliere Nero Visualizza il messaggio
    a livello di codice come potrei intercettare un'applicazione che ha smesso di funzionare?
    Mostra la routine con la gestione degli errori.

  9. #9
    Negli eventi di Windows ho trovato questo:
    Nome registro: Application
    Origine: Application Error
    Data: 22/12/2016 09:41:34
    ID evento: 1000
    Categoria attivit�100)
    Livello: Errore
    Parole chiave: Classico
    Utente: N/D
    Computer: DESKTOP-EB8SUTP
    Descrizione:
    Nome dell'applicazione che ha generato l'errore: NomeApplicazione.exe, versione: 3.4.0.0, timestamp: 0x5858130c
    Nome del modulo che ha generato l'errore: ntdll.dll, versione: 10.0.10586.672, timestamp: 0x580efaf8
    Codice eccezione: 0xc0000005
    Offset errore 0x0003c7c9
    ID processo che ha generato l'errore: 0x1b8
    Ora di avvio dell'applicazione che ha generato l'errore: 0x01d25b76d44f6a2d
    Percorso dell'applicazione che ha generato l'errore: C:\NomeAzienda\NomeApplicazione\NomeApplicazione.e xe
    Percorso del modulo che ha generato l'errore: C:\Windows\SYSTEM32\ntdll.dll
    ID segnalazione: 5d97208c-d7e3-4fb2-9641-b7cc63ec507e
    Nome completo pacchetto che ha generato l'errore:
    ID applicazione relativo al pacchetto che ha generato l'errore:
    XML evento:
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2016-12-22T08:41:34.248979500Z" />
    <EventRecordID>13383</EventRecordID>
    <Channel>Application</Channel>
    <Computer>DESKTOP-EB8SUTP</Computer>
    <Security />
    </System>
    <EventData>
    <Data>NomeApplicazione.exe</Data>
    <Data>3.4.0.0</Data>
    <Data>5858130c</Data>
    <Data>ntdll.dll</Data>
    <Data>10.0.10586.672</Data>
    <Data>580efaf8</Data>
    <Data>c0000005</Data>
    <Data>0003c7c9</Data>
    <Data>1b8</Data>
    <Data>01d25b76d44f6a2d</Data>
    <Data>C:\NomeAzienda\NomeApplicazione\NomeApplicaz ione.exe</Data>
    <Data>C:\Windows\SYSTEM32\ntdll.dll</Data>
    <Data>5d97208c-d7e3-4fb2-9641-b7cc63ec507e</Data>
    <Data>
    </Data>
    <Data>
    </Data>
    </EventData>
    </Event>
    Io ho l'impressione che sia la dll che generi l'errore e come conseguenza Windows chiude l'applicazione.

    eziogsv
    Bisogna vedere cosa intendi per: "Smette di funzionare"
    Intendo questo:

    Cattura.PNG

    Vado al computer e mi ritrovo questo simpatico messaggio mentre il programma e' ancora presente tra i processi, anche la finestra del programma con i grafici resta aperta ma annebbiata e bloccata (non risponde ai comandi), clicco sul tasto "Chiudi programmi" e Windows chiude la finestra ed il processo.
    Penserai che forse sara' apparsa una finestra che indicava che si era verificata un'eccezione non gestita e poi ad un certo punto si e' chiusa visualizzando il messaggio che ho postato prima, ma non e' cosi perche', proprio per evitare che potesse sfuggirmi la visualizzazione dell'eccezione, ho inserito nell'evento che mi avevi indicato del codice che scrive nel file di log che si e' verificata un'eccezione non gestita, nel file di log invece non e' stato registrato nulla, ne' eccezioni gestite, ne' eccezioni non gestite.

    Gibra
    Mostra la routine con la gestione degli errori.
    Al momento non posso attingere al codice in quanto il computer dove programmavo mi ha abbandonato ieri sera, ha deciso di farmi il regalo di Natale... cercherò di postare il codice appena avro' possibilita'.


    Dimenticavo una cosa impostante, ci sono due computer dove gira il programma, uno dove è allocato anche il database e c'è installato XAMPP e l'altro che si collega al database condiviso in rete, su entrambi c'è installata la stessa versione di Windows, le uniche differenze sono quelle dette in precedenza, il problema fino ad ora non si è mai verificato sul computer dove non è allocato il database, possibile sia XAMPP a darmi queste noie?
    Ultima modifica di Cavaliere Nero; 23-12-2016 a 20:54

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da Cavaliere Nero Visualizza il messaggio
    possibile sia XAMPP a darmi queste noie?
    E lo chiedi a noi???

    Tutto è possibile.

    Buona Natale

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.