Sto cercando di creare diversi servizi Windows per fare cose diverse. Per esempio, ho bisogno di servizi di Windows che sarà:Più servizi Windows in un exe
- Invia un report giornaliero via e-mail
- periodicamente la pulizia di alcune informazioni archiviate ogni 30 minuti
- ecc
I compiti ho bisogno le finestre i servizi da fare sono distinti quindi non mi piace l'idea di averli tutti in un unico servizio.
Quello che ho finora è un progetto in Visual Studio 2008. Ho creato un servizio di Windows, ho impostato un timer sull'evento OnStart (solo scrive in un file di testo ogni 5 secondi per scopi di test). Ho quindi aggiunto un programma di installazione al progetto e quando eseguo InstallUtil.exe, tutto funziona correttamente.
Il problema si presenta quando aggiungo un secondo servizio Windows allo stesso progetto. Ho impostato nuovamente il codice OnStart, con le stesse informazioni di registrazione (leggermente diverse in modo da poter dire quale servizio sta scrivendo nel registro). Con il secondo servizio di Windows, ho cambiato l'evento principale in Program.cs da:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
a:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2()
};
ServiceBase.Run(ServicesToRun);
}
A questo punto, non ci sono errori di compilazione, ma il servizio non fa mai Service2 qualsiasi cosa ... l'attività di registrazione non viene mai attivata.
Ho ridotto il limite al fatto che al secondo servizio non è associato "Installer". Ho quindi provato ad aggiungere un programma di installazione come ho fatto con il primo servizio (ad esempio, fare clic con il tasto destro del mouse sul progettista del servizio e fare clic su "Aggiungi programma di installazione"). Ora, quando vado al file ProjectInstaller.cs, c'è un altro serviceInstaller lì (serviceInstaller2).
Ora, quando ho costruire il progetto e cercare di installare i servizi, e vado alla finestra del pannello di controllo "Servizi", e cerco di iniziare Service1, ottengo il seguente messaggio di errore:
di Windows Impossibile avviare il servizio Service1 sul computer locale.
Errore 1083: il programma eseguibile per cui questo servizio è configurato per l'esecuzione non implementa il servizio.
Viene visualizzato lo stesso messaggio di errore se si tenta di avviare anche Service2 (con l'eccezione che il messaggio di errore identifica Service2, ovviamente).
C'è qualcosa che mi manca per ottenere due servizi in esecuzione da un exe?
C'è un motivo particolare diverso da "voglio" che si bisogno di avere i servizi in un singolo eseguibile? Normalmente, la modularità sarebbe preferibile, ma potresti avere circostanze attenuanti che richiedono diversamente. – bsneeze
L'unica vera ragione è la facilità di installazione e distribuzione. Tutti i "servizi" sono abbastanza veloci, una parte delle funzionalità, quindi preferirei non dover installare il numero x di servizi Windows per piccoli pezzi di codice. –
@pyrochild - Sono sicuro che ci sono numerosi motivi per montare più servizi all'interno di un singolo assemblaggio. Dove lavoro ora usiamo bestie di quel design su una base per cliente - rende il test del software che interagisce con quei servizi in un attimo. – Hardryv