Pergunta

Eu estou escrevendo uma série de serviços do Windows. Eu quero que eles não conseguem se os erros são jogados durante a inicialização (no método OnStart()). Eu tinha assumido que simplesmente jogando um erro no OnStart() faria isso, mas eu estou achando que em vez disso, "começa" e apresenta-me com uma mensagem informando "O serviço foi iniciado, mas está inativo. Está correto?" (Paráfrase). Como posso lidar com o erro para que ele realmente não consegue iniciar o serviço?

Foi útil?

Solução

Se você estiver executando o .NET 2.0 ou superior, você pode usar ServiceBase.Stop para parar o serviço de OnStart. Caso contrário, chamar Parar de um novo segmento.

ref [devnewsgroups] ( http: / /www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx )

(grupo de notícias ido)

Outras dicas

Se a principal coisa que queremos é que a janela Serviços de informar que houve um erro, pelo que eu tentei (.NET 3.5 no Windows 7), a única maneira de fazer isso é através da criação do ExitCode. Eu recomendo definindo-a 13816, uma vez que isto resulta na mensagem, "Um erro desconhecido ocorreu." Consulte as janelas códigos de erro .

O exemplo a seguir realiza três coisas. 1 - definindo resultados EXITCODE em uma mensagem útil para o utilizador final. Ela não afeta registo de aplicações do Windows, mas não incluir uma mensagem no log do sistema. 2 - chamando Pare resulta em um "Serviço com sucesso parado" mensagem no log do aplicativo. 3 -. Atirar os resultados de exceção em uma entrada de log úteis no log do aplicativo

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

Mover toda a sua lógica de inicialização para um método separado, e jogue exceções (ou ligue OnStop) a partir desse método separado.

OnStart tem algumas esquisitices no arranque. Descobri que se OnStart () não tem mais de uma linha na mesma, então eu não entendo as exceções "O serviço começou e depois serviços stopped.Some parar automaticamente se eles não têm trabalho a fazer" mensagem e jogados irá encerrar a processar e log no log de eventos do aplicativo.

Também com o método de inicialização separado, você pode usar uma técnica como esta para depurá-lo sem anexar. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top