Posso avere più servizi ospitati in un unico file eseguibile di Windows
-
18-09-2019 - |
Domanda
La mia domanda è essenzialmente lo stesso di quello successivo, ma la risposta non mi ha aiutato.
.NET Windows Service - più servizi in un unico progetto
In sostanza, ho 3 servizi, consente di dire "Service1", "Servizio" e "Service3".
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1("Service1"),
new Service2("Service2"),
new Service3("Service3")
};
ServiceBase.Run(ServicesToRun);
Ho anche classi di installazione con corrispondenti serviceInstaller.ServiceName = "ServiceX" per ciascuno di questi servizi.
Quando uso installutil, io vedo tutti e 3 i servizi sul gestore di servizio. Tuttavia, quando inizio di loro (uno o tutti loro) solo il primo ( "Service1") è in esecuzione.
So che è banale e posso probabilmente diversi progetti di installazione per ognuno di questi, ma nel mio caso, si rende semanticamente più senso utilizzare un solo
Il vostro aiuto è apprezzato
Grazie Venu
Soluzione
Ho creato un progetto di servizio di 3 (in basso), che utilizza un programma di installazione di progetto per ogni servizio. Ho poi aggiunto un progetto di installazione che installa i servizi in responsabile del servizio. Qui è stato il mio flusso di lavoro:
- Crea 3 servizi in una soluzione in Visual Studio 2008. Naming ogni servizio come Service1, Service2 e, Service3. (Avendo cura di cambiare i nomi dei servizi reali per i loro rispettivi nomi nella finestra delle proprietà.)
- Aggiunto un progetto di installazione di questa soluzione.
- aggiunti i risultati del progetto dei tre progetti di servizio al progetto di installazione.
- azioni personalizzate aggiunto per tutti e tre i servizi nel programma di installazione per l'installazione dei servizi nel responsabile di servizio.
- costruito e installato.
Questo mi dà tre servizi distinti responsabile del servizio: Service1, Service2 e Service3
Enjoy!
http://code.google.com/p/multi-service-install /
EDIT:
Ho aggiornato il codice nel repository di avere un unico eseguibile, ma due servizi. Ogni servizio installato al gestore del servizio con il proprio nome e la capacità di start / stop. Credo che questo è ciò che hai intenzione, giusto? Ecco quello che ho fatto:
- creato un progetto di servizio.
- aggiunto un secondo servizio per lo stesso progetto (con un nome servizio unico).
- Aggiunto un programma di installazione per entrambi i servizi (serviceâ e ServiceB).
- Nel file ProjectInstaller.Designer.vb ho cambiato la linea Me.Installers.AddRange per mostrare entrambi gli installatori di servizio. (Me.ServiceInstaller1, Me.ServiceInstaller2)
- Nel punto di ingresso principale del servizio principale (serviceâ nel mio caso), ho impostato la variabile ServicesToRun a una serie di ServiceBase contenente tutti i servizi che voglio l'esecuzione (serviceâ e ServiceB). Questo è un passo importante in quanto il responsabile del servizio imposta una proprietà in base al numero di argomenti qui - o per consentire a più istanze dello stesso exe o solo una singola istanza.
- Aggiungere un progetto di installazione e utilizzare l'uscita di servizi.
- Aggiungi un'azione personalizzata utilizzando l'uscita dai servizi.
Il codice può ancora essere scaricato dallo stesso collegamento come sopra.
Grazie!