2009-07-27 27 views
9

Sto tentando di utilizzare un programma di installazione per un servizio Windows e vorrei evitare di utilizzare InstallUtil.exe. Il programma di installazione sembra funzionare correttamente (l'eseguibile e le DLL sono nella directory corretta), ma il servizio non viene visualizzato in Gestione computer.C# - programma di installazione del servizio Windows che non registra il servizio

Ecco che cosa ho fatto finora:

Il servizio nome della classe è l'impostazione predefinita - Service1.

Nel programma di installazione del progetto, il Nome servizio del programma di installazione del servizio corrisponde al nome della classe - Servizio1.

nell'ambito delle azioni personalizzate, l'output primario del servizio è stato aggiunto per l'installazione, Commit, Rollback e Uninstall.

sto usando http://support.microsoft.com/kb/816169 come riferimento.

Qualche idea?

risposta

15

Il progetto di servizio ha una classe di installazione? Dovresti averne uno simile a questo:

[RunInstaller(true)] 
public partial class Service1Installer : Installer 
{ 
    public Service1Installer() 
    { 
     InitializeComponent(); 
     ServiceProcessInstaller process = new ServiceProcessInstaller(); 
     process.Account = ServiceAccount.LocalSystem; 

     ServiceInstaller serviceAdmin = new ServiceInstaller(); 
     serviceAdmin.StartType = ServiceStartMode.Manual; 
     serviceAdmin.ServiceName = "Service1"; 
     serviceAdmin.DisplayName = "Service1"; 
     serviceAdmin.Description = "Service1"; 

     Installers.Add(serviceAdmin); 
    } 
} 
+0

Questo è quello che mi mancava. Pensavo che la parte Installers.Add() sarebbe stata inclusa nel codice di Designer generato automaticamente, ma non lo era. Forse l'hanno cambiato? –

+0

Sì, ho visto che l'hai capito mentre stavo pubblicando – SpaceghostAli

3

assicurarsi di aver creato un ServiceInstaller e la classe ServiceProcessInstaller nel progetto di servizio. (Controllare this link per ulteriori informazioni).

Chiudere la gestione del computer e la finestra Servizi, eseguire nuovamente il programma di installazione e riaprire la finestra Servizi.

Se ciò non funziona, riavviare il computer. Potresti avere alcuni file bloccati.

Inutile dire che probabilmente è necessario disporre di privilegi amministrativi sulla macchina affinché funzioni correttamente.

+0

Il codice di esempio nel collegamento pubblicato mi ha fatto prendere la strada giusta, grazie mille. –

0

Penso di aver capito. Potrebbe essere un bug con il codice Designer, o forse ho perso un passaggio.

Credo che nel codice progettista, nel metodo InitializeComponent(), si suppone di aggiungere:

this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1}); 

non era lì, così ho aggiunto questo nel costruttore ProjectInstaller:

Installers.Add(serviceInstaller1); 
Installers.Add(serviceProcessInstaller1); 

Al momento dell'installazione, è elencato come servizio in Gestione computer.

Problemi correlati