Executando o Aplicativo de Serviço do Windows sem instalá-lo

Quando estou escrevendo um serviço do Windows e apenas bato F5 eu recebo a mensagem de erro que eu tenho que instalá-lo usando installutil.exe e depois executá-lo. Na prática, isso significa que toda vez que eu mudo uma linha de código:

  1. compilar
  2. alternar para o prompt de comando do desenvolvedor
  3. remova a versão antiga
  4. instalar nova versão
  5. Começar serviço

Isso é muito inconveniente. Tem algum jeito melhor de fazer isso?

Eu costumo colocar a maior parte da implementação do serviço em uma biblioteca de classs e, em seguida, criar dois “front-ends” para executá-lo – um um projeto de serviço, o outro, um console ou aplicativo de formulários do Windows. Eu uso o aplicativo console / forms para debugging.

No entanto, você deve estar ciente das diferenças no ambiente entre a experiência de debugging e ao executar como um serviço genuíno – por exemplo, você pode acabar acidentalmente dependendo da execução em uma session com um usuário interativo ou (para winforms) está correndo.

A melhor maneira na minha opinião é usar a diretiva de Debug . Abaixo está um exemplo para o mesmo.

 #if(!DEBUG) ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { // Calling MyService Constructor new MyService() }; ServiceBase.Run(ServicesToRun); #else MyService serviceCall = new MyService(); serviceCall.YourMethodContainingLogic(); #endif 

Clique em F5 e defina um ponto de Breakpoint no seu método YourMethodContainingLogic para YourMethodContainingLogic -lo.

Você não pode executar o serviço do Windows como diz outro console ou aplicativo WinForms. Ele precisa ser iniciado pelo próprio Windows.

Se você não tem infra-estrutura pronta para usar como sugere @Damien_The_Unbeliever (que é o que eu recomendo também), você pode instalar o serviço a partir do local de debugging. Então você usa o installutil uma vez e aponta para o executável localizado em /bin/debug . Em seguida, você inicia um serviço a partir do services.msc e usa o Visual Studio > Debug > Attach to Process menu Visual Studio > Debug > Attach to Process e anexa ao serviço do Windows.

Você também pode considerar o uso Thread.Sleep(10000) como a primeira linha na chamada OnStart , ou Debugger.Break() para ajudá-lo a poder append antes que o serviço execute qualquer trabalho. Não se esqueça de removê-los antes do lançamento.

Você pode usar a variável Environment.UserInteractive . Detalhes da implementação aqui