Pergunta

Estou prestes a desenvolver um programa que será instalado e executado como um serviço do Windows nos servidores back-end (com acesso à Internet) de diversos clientes. Eu não tenho acesso físico aos servidores. O que eu estou trabalhando em um esquema para rolar de forma confiável as atualizações para o programa.

Eu tenho gastar um monte de tempo à procura de melhores práticas para o serviço do Windows atualizações automáticas, mas têm encontrado muito pouca informação útil. A maioria das técnicas, tais como ClickOnce, parecem servir principalmente para aplicações baseadas em Windows Forms.

Meu plano atual é:

  • Quando as atualizações estão disponíveis, tem o download serviço executado, instalar e iniciar um serviço de atualização.
  • O serviço de atualização irá baixar a nova versão do serviço principal e instalá-lo lado a lado da atual, ainda versão ativa.
  • O serviço de actualização junto pára a versão antiga e, em seguida, começa a nova versão do serviço.
  • A nova versão desativa o serviço de atualização durante a inicialização.

Algumas preocupações importantes para mim são:

  • Ser capaz de lidar com as atualizações tanto para o serviço principal e o serviço de atualização
  • Ser capaz de lidar com interrupções, tais como falha de energia ou uma falha de conexão a qualquer momento durante o processo de atualização

O que estou querendo saber é se esta uma maneira comum de resolver este problema e / ou se eu estou faltando alguma coisa crucial. É muito complicado, ou talvez demasiado simplista? Como você teria feito isso (ou, melhor ainda, como você tem feito isso com sucesso)?

Obrigado!

Foi útil?

Solução

fui confrontado com o mesmo problema no ano passado e eu lutei com um monte das mesmas perguntas. Alguns pedaços de conselhos:

  • Uma vez que ambos os serviços podem ser atualizados, Ambos os serviços funcionarão como updaters do outro. Serviço de uma vontade atualização do Service B e vice-versa. Para esta razão, sugiro simplesmente executando ambos os serviços em todos os momentos. A não ser que você está preocupado com realmente carregamento o seu servidor com chamadas faz-update-existir, o ativar / desativar o gerenciamento de serviços não vale a pena a sobrecarga.

  • serviços como não pode ser instalado em um máquina única. Em outras palavras, você Não é possível instalar novos e antigos versões do side-by-side o serviço se eles têm o mesmo nome. A não ser que você queira complicar o processo de atualização, I sugiro que você desinstale a versão antiga e, em seguida, instalar a nova versão. Por exemplo, Serviço Um iria baixar Serviço B Installer, desinstalação Serviço B, instalar nova versão do Serviço B e depois executar. serviço B faria o mesmo para o Serviço A.

  • Uma vez que cada serviço está a gerir o outros, eles não só deve verificar se há atualizações disponíveis, mas eles devem verificar a saúde do outro. Para exemplo, Serviço Um iria verificar para ver se o Service B existe e se é corrida. Se a verificação de integridade falhar, uma lista de passos para resolver o problema e se o serviço executado seria completado por Serviço A. Executar o operações de verificação de saúde e recuperação cobrirá agora você importa o assunto surge com a atualização, inicial instalar ou operações gerais.

  • ampla logging

    Do tanto no cliente eo servidor. Você vai querer acompanhar que ações foram tomadas e quando. Por exemplo, Serviço Uma força quando se é a verificação de atualizações, quando é executar o exame de saúde e ações associadas. No serviço (Supondo que você está chamando para uma web serviço de procura de atualizações) trilha as chamadas feitas por cada serviço. E se seus serviços não estão sendo atualizados pelo menos você terá uma trilha de pão ralado (ou falta de) farinha de rosca apontando-lhe para o problema.

Há literalmente cachos de potenciais armadilhas com uma solução deste tipo: serviços não executar na inicialização, UAC ficando no caminho, não ser capaz de instalar e desinstalar os serviços com o mesmo usuário, garantindo usuário instalar o serviço tem amplo permissões, perda de conectividade, recebendo o .NET Framework instalado na máquina do cliente, manipulação de reinicialização após a instalação, se necessário, etc.

O melhor de sorte. É um problema divertido para resolver, mas não vai sem a sua frustração - especialmente porque, como você disse, não há um monte de informação documentada disponível

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