Pregunta

Estoy tratando de utilizar un instalador de un servicio de Windows, y me gustaría evitar el uso de InstallUtil.exe. El programa de instalación parece funcionar correctamente (el ejecutable y archivos DLL están en el directorio correcto), pero el servicio no aparece en Administración de equipos.

Esto es lo que he hecho hasta ahora:

El nombre de la clase de servicio es el valor por defecto - Servicio1

.

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

En las acciones personalizadas, se añadió la salida principal del servicio para instalar, Commit, Rollback, y desinstalar.

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

¿Alguna idea?

¿Fue útil?

Solución

¿Su proyecto de servicio tiene una clase de instalador? Debe tener uno que se ve algo como 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);
    }
}

Otros consejos

Asegúrese de que haya creado un ServiceInstaller y la clase ServiceProcessInstaller en su proyecto de servicio. (Marque este enlace para más información).

Cerca de gestión de equipo y la ventana Servicios, ejecutar el instalador de nuevo, y volver a abrir la ventana Servicios.

Si eso no funciona, reinicie el equipo. Es posible que tenga algunos archivos bloqueados.

No hace falta decir que es probable que tenga privilegios administrativos en la máquina para que esto funcione correctamente.

Creo que he descubierto. Podría ser un error con el código del diseñador, o tal vez me he perdido 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});

No estaba allí, así que añadió esta en el constructor ProjectInstaller:

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

Ahora, en la instalación, aparece en la lista como un servicio en Administración de equipos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top