Domanda

Esiste un framework che può essere utilizzato per consentire a un servizio Windows C # di verificare automaticamente una versione più recente e aggiornarsi? Posso certamente scrivere codice per raggiungere questo obiettivo, ma sto cercando un framework che è già stato implementato e (soprattutto) testato.

[modifica] Ecco un collegamento a una domanda simile con collegamenti a progetti moderni che aiutano a raggiungere questo obiettivo: Libreria di aggiornamento automatico per .NET?

È stato utile?

Soluzione

L'unico modo per scaricare i tipi è distruggere l'appdomain. Per fare ciò richiederebbe la separazione del livello di hosting dal codice del servizio in esecuzione - questo è piuttosto complesso. (un po 'come fare un intervento chirurgico al buco della serratura)

Può essere più semplice a) eseguire un'attività batch o b) rilevare gli aggiornamenti in servizio, quindi avviare un processo separato che arresta il servizio, aggiorna gli assiemi, ecc. quindi lo riavvia.

Se sei interessato al primo, i pattern e le pratiche MSDN folk hanno scritto un blocco di aggiornamento delle app che ti adatti al tuo servizio.

https : //web.archive.org/web/20080506103749/http: //msdn.microsoft.com/en-us/library/ms978574.aspx

Altri suggerimenti

Non sono a conoscenza di alcun Framework che faciliti le soluzioni a questo specifico problema.

Quello che si può provare è però di separare la logica aziendale del servizio dal codice di servizio effettivo in diversi assiemi. Fare in modo che l'assembly del servizio controlli gli aggiornamenti dell'assembly della logica di business a intervalli regolari, copiarlo da un'origine remota, se necessario, scaricare il vecchio assembly BL (e forse eliminare), quindi caricare dinamicamente la nuova versione (lo scaricamento del vecchio assembly non è un compito banale).

Un'altra possibile soluzione è disporre di un servizio separato in esecuzione, che interrompe l'altro, se è presente un aggiornamento, quindi aggiorna il servizio. Non è possibile avere un aggiornamento del servizio stesso perché il file DLL in esecuzione non si arresterà.

Separare il livello di logica aziendale sarebbe una buona opzione. È inoltre possibile riscrivere il servizio principale da eseguire in modalità riflessa da un servizio master o di controllo. Questo è simile alla separazione della logica di business e richiederebbe solo l'arresto di un thread e il riavvio.

Non conosco un framework noto che lo faccia. L'ho fatto da solo, ma questo non è un quadro pubblico.

Sto usando WyBuild per aggiornare le mie applicazioni (compresi i servizi di Windows) ed è davvero fantastico. Davvero facile da usare e davvero facile da integrare con le applicazioni esistenti. È un ottimo framework di aggiornamento automatico ...

http://wyday.com/wybuild/ aiuto / automatico-updates / windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows -service.php

Nota che si tratta di un framework a pagamento (la licenza è per sviluppatore, è inclusa una versione di prova gratuita)

Nel caso qualcun altro lo stia cercando; Ho trovato questo link interessante. Non ho implementato questa soluzione, ma sembra che potrebbe funzionare per me

http://www.eggheadcafe.com/articles/20041204.asp

Potresti chiarire un po 'la tua domanda? Sono un po 'confuso, perché per quanto ne so, puoi sempre sovrascrivere le DLL utilizzate dal servizio. La copia e il riavvio del servizio possono essere facilmente integrati nel processo di creazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top