2009-05-20 20 views
5

Sto scrivendo un servizio Windows in .net 2.0.Come interrompere un servizio con il metodo OnStart?

Cosa devo fare nel metodo OnStart() se per qualche motivo non desidero avviare il servizio? Posso semplicemente chiamare il metodo Stop() della classe base (ServiceBase)? L'ho provato e sto ottenendo alcune eccezioni di accesso alla memoria divertenti. È necessario avviare una discussione separata per chiamare il metodo Stop()?

risposta

8

Perché vuoi farlo? Se si verifica un errore, registrarlo nel registro eventi e generare un'eccezione. Il tuo servizio non verrà avviato e l'utente verrà informato che è successo qualcosa di brutto.

+0

In effetti, se si genera un'eccezione, il servizio non verrà avviato. I servizi di Windows gestiscono tutto ciò per te. – Noldorin

+0

Ci sono molti motivi per cui uno potrebbe non voler avviare un servizio! Quindi forse non stai davvero chiedendo il perché, ma piuttosto suggerire la risposta è gettare un'eccezione? Che ne dici di impostare ServiceBase.ExitCode - è consigliabile/necessario? – Rory

+1

@Rory: non riuscire ad avviare un servizio è una cosa diversa dall'avvio e dall'arresto immediato. Sono contrario a partire con successo e in silenzio fermandosi. ExitCode verrà registrato nel registro eventi in modo da poter prendere in considerazione l'impostazione. Non è richiesto però. –

0

Utilizzare un ServiceController e interromperlo tramite tale, quindi tornare immediatamente.

0

È possibile utilizzare Environment.FailFast(). Basta essere consapevoli del fatto che ignora qualsiasi blocco try-catch-finally.

Problemi correlati