Eu quero o meu # Windows Service C para automaticamente atualizar-se
-
01-07-2019 - |
Pergunta
Existe um quadro que pode ser usado para permitir que um # Windows Service C para verificar automaticamente para uma versão mais recente e atualizar-se? Posso código certamente escrita para fazer isso, mas eu estou procurando uma estrutura que já foi implementado e (mais importante) testada.
[editar] Aqui está um link para uma pergunta semelhante com links para projetos modernos que ajuda fazer isso: biblioteca Auto-update for .NET?
Solução
A única maneira de tipos de descarregamento é destruir o appdomain. Para fazer isso exigiria a separação de sua camada de hospedagem do seu código de serviços que executa - isso é muito complexa. (Tipo de como fazer a cirurgia laparoscópica)
Pode ser mais fácil para qualquer um) executar uma tarefa de lote ou b) em serviço detectar actualizações em seguida, lançar um processo separado que interrompe o serviço, atualizações assembléias etc. em seguida, reinicia-lo.
Se você estiver interessado na antiga, o MSDN padrões e práticas popular escreveu um aplicativo atualizador bloco que você se adaptar ao seu serviço.
https : //web.archive.org/web/20080506103749/http: //msdn.microsoft.com/en-us/library/ms978574.aspx
Outras dicas
Eu não estou ciente de quaisquer estruturas que facilitem soluções para esse problema específico.
O que você poderia tentar embora é separar a lógica de negócios do serviço a partir do código de serviço real em diferentes montagens. Ter o serviço de montagem verificar se há atualizações para a lógica de negócios de montagem em intervalos regulares, copiá-lo a partir de uma fonte remota, se necessário, descarregar o velho BL montagem (e talvez excluir), e depois carregar dinamicamente a nova versão (descarregando o velho montagem não é uma tarefa trivial).
Outra solução possível é ter um serviço separado que corre, pára o outro, se houver uma atualização, e atualiza o serviço. Você não pode ter uma atualização de serviço em si, porque o arquivo .dll que está executando não vai parar.
Separando a camada de lógica de negócio seria uma boa opção. Você também pode reescrever o principal serviço para executar sob reflexão por um serviço de mestre ou controle. Isto é semelhante ao que separa a lógica de negócios, e isso só seria necessário parar um fio e a iniciá-lo novamente.
Não conheço nenhum quadro conhecido que faz isso. Eu tenho feito isso mesmo, mas isso não é uma estrutura pública.
Eu tenho usado WyBuild para atualizar minhas aplicações (incluindo os serviços do Windows) e é bastante impressionante. Realmente fácil de usar, e muito simples de se integrar com as aplicações existentes. É uma muito grande estrutura automática Atualizando ...
http://wyday.com/wybuild/ ajuda / automáticas atualizações / windows-services-consola-apps.php http://wyday.com/wybuild/help/silent-update-windows -service.php
Note que é um quadro pago (a licença é por desenvolvedor, uma experimentação livre está incluído)
No caso de alguém mais está procurando por este; Eu encontrei este link interessante. Eu não implementaram esta solução, mas parece que ele pode trabalhar para me
Você pode esclarecer sua pergunta um pouco? Estou um pouco confuso, porque até onde eu sei, você sempre pode substituir as DLLs os usos de serviços. A cópia e reinício do serviço pode ser feita facilmente parte de você processo de construir.