2012-08-02 4 views
8

Sto provando a creare il servizio Windows utilizzando TopShelf. Tutto funziona bene con una istanza del servizio. Tuttavia, quando copio l'intera cartella del servizio in una posizione diversa e poi eseguo l'installazione nel luogo in cui si blocca su "avvio".TopShelf installa più dello stesso servizio sulla stessa macchina

Assegnare il servicename, descrizione, displayaname in base al valore in un file di configurazione in modo che non vi sia alcun conflitto di denominazione.

+0

Unisciti alla mailing list con questo e includi l'output del registro, se possibile. https://groups.google.com/forum/#!forum/topshelf-discuss. Questo sarà difficile da capire attraverso SO; tuttavia, è possibile impostare il nome di "istanza" che dovrebbe consentire di eseguire due degli stessi servizi. – Travis

+0

Sei sicuro che servicename e displayname sono unici? Ho provato a installare due servizi con nomi di servizio univoci ma usando lo stesso displayname e non ha funzionato troppo. – Bomberlt

risposta

22

È il servizio instancename che è necessario differenziare.

Dal documentation:

service.exe [verb] [-option: value] [-switch]

installare Installa il servizio

-instance Un'istanza nome se si registra più volte il servizio

Così si potrebbe usare:

service.exe install -instance:FirstInstanceOfMyService 

service.exe install -instance:SecondInstanceOfMyService 
5

Se quello che vuoi è quello di impostare il nome istanza del servizio nel file di configurazione, è possibile impostare il nome di istanza programatically così:

var instanceName = ConfigurationManager.AppSettings["Instance"]; 
HostFactory.Run(hostConfigurator => 
{  
    ... 
    hostConfigurator.SetDisplayName("My service"); 
    hostConfigurator.SetDescription("My service that does something"); 
    hostConfigurator.SetServiceName("MyService"); 
    hostConfigurator.SetInstanceName(instanceName); 
} 

Così, durante l'installazione viene eseguita solo

MyService.exe install