2009-07-27 13 views
9

Estoy tratando de usar un instalador para un servicio de Windows, y me gustaría evitar el uso de InstallUtil.exe. El instalador parece funcionar correctamente (el ejecutable y los dlls están en el directorio correcto), pero el servicio no aparece en Administración de equipos.C# - instalador de servicios de Windows que no registra el servicio

Aquí es lo que he hecho hasta ahora: nombre de la clase

El servicio es el valor por defecto - Service1.

En el instalador del proyecto, ServiceName del instalador del servicio coincide con el nombre de la clase - Service1.

En Acciones personalizadas, la salida principal del servicio se agregó a Instalar, Comprometer, Revertir y Desinstalar.

Estoy usando http://support.microsoft.com/kb/816169 como referencia.

¿Alguna idea?

Respuesta

15

¿Su proyecto de servicio tiene una clase de Instalador? Debería tener uno que se parece a esto:

[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

Eso es lo que me estaba perdiendo. Pensé que la parte de Installers.Add() se incluiría en el código del Diseñador generado automáticamente, pero no fue así. Tal vez lo cambiaron? –

+0

Sí, lo vi descifrarlo justo cuando estaba publicando – SpaceghostAli

3

Asegúrese de haber creado una clase ServiceInstaller y ServiceProcessInstaller en su proyecto de servicio. (Consulte this link para obtener más información).

Cierre la administración de la computadora y la ventana de Servicios, vuelva a ejecutar el instalador y vuelva a abrir la ventana de Servicios.

Si eso no funciona, reinicie su computadora. Es posible que tenga algunos archivos bloqueados.

No hace falta decir que probablemente necesite privilegios administrativos en la máquina para que esto funcione correctamente.

+0

El código de ejemplo en el enlace publicado me puso en el camino correcto, muchas gracias. –

0

Creo que lo he descubierto. Puede ser un error con el código del Diseñador, o tal vez me perdí un paso.

Creo que en el código de diseño, en el método InitializeComponent(), que se supone que añadir:

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

que no estaba allí, por lo que añade esto en el constructor ProjectInstaller:

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

Ahora, en la instalación, aparece como un servicio en Computer Management.

Cuestiones relacionadas