Domanda

Ho creato un'applicazione WinForm (monitoraggio) utilizzando VS 2005 (C #), e ora, ho un problema quando questa applicazione si blocca per qualche ragione, devo essere sicuro che verrà riavviato automaticamente.

Come posso risolvere questo? (Forse utilizzando un'applicazione Windows servizi?)

Grazie

È stato utile?

Soluzione 6

Grazie a tutti voi, la soluzione che ho scelto è: nel programma principale aggiungo un eventi di eccezione (UnhandledExceptionEventHandler & ThreadExceptionEventHandler vedi sopra) in questi eventi ho riavviare il programma (anche mettendo log e-mail a errori di traccia). E per il problema riavvio aggiungo chiave di registro in [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run] con il mio percorso di applicazione per essere sicuri che la mia domanda verrà riavviato dopo il riavvio di Windows;)

Altri suggerimenti

Sì, una creazione di un Windows Service avrebbe funzionato come è possibile impostare il riavvio automatico se si blocca, ma un modo migliore sarebbe quello di evitare che schiantarsi in primo luogo! C'è una ragione specifica si blocca?

Con la gestione e reporting è possibile scrivere in modo che esso riporta semplicemente eventuali errori che si verificano e porta via, che secondo me sarebbe la strada migliore da percorrere

buona errore

Considerate questo:

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

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

Minimo server

Windows Server 2008

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

La creazione di un servizio di Windows è una buona idea per qualsiasi a lungo in esecuzione processo in background per molte ragioni, tuttavia ri-iniziare un schiantato applicazione non è uno di loro!

Si dovrebbe capire il motivo per cui l'applicazione si blocca e impedire che accada.

Con tutti i mezzi, anche convertire l'applicazione per un servizio di Windows -. Vedrete molti benefici, ma il modo corretto per risolvere il problema è quello di risolvere il crash dell'applicazione in primo luogo

Per * text forte * un'applicazione watcher. È necessario creare un timer sul servizio di Windows e il codice di qualcosa di simile nel caso timer tick:

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

se davvero non puoi fare nulla circa il problema di crash che consiglierei un try-catch invece di un osservatore. (Non dimenticare di ri-lancio movimentate importanti eccezioni)

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

Dal momento che si dice che si utilizza un'applicazione di Windows Form non è possibile utilizzare un servizio di Windows per questo, dal momento che un servizio di Windows, non è consentito di avere un'interfaccia grafica.

Quello che vorrei farlo che vorrei creare un'applicazione invisibile "cane da guardia", che controlla il processo e riavvia automaticamente quando si blocca.

Si può mettere un blocco try cattura tutto il codice che è più probabile che la causa del crash. Quindi scrivere il messaggio di eccezione in un file di log. È anche possibile impostare un punto di debug nel blocco catch per vedere altri dettagli come stack di chiamate, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top