2011-10-27 31 views
112

Cuando creo un nuevo servicio de Windows en Visual Studio 2010, aparece el mensaje que indica que debe usar InstallUtil y net start para ejecutar el servicio.Instalar el servicio de Windows creado en Visual Studio

he probado los siguientes pasos:

  1. Crear nuevo archivo de proyecto -> Nuevo -> Proyecto -> servicio de Windows
  2. Nombre del proyecto: TestService
  3. proyecto
  4. Construir como es (constructor Service1, OnStart , OnStop)
  5. Abierto de comandos, ejecute "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe
  6. Run net start TestService.

salida del paso 4

La ejecución de una instalación tramitada.

Comenzando la fase de instalación de la instalación.

Ver el contenido del archivo de registro para el C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ progreso de depuración \ TestService.exe de montaje.

El archivo se encuentra en C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.

Instalación del ensamblado 'C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe'.

parámetros afectados son:

logtoconsole =

logfile = C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService. InstallLog

assemblypath = C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestServ hielo \ TestService \ obj \ x86 \ Debug \ TestService.exe

No se encontraron instaladores públicos con el atributo RunInstallerAttribute.Yes en el ensamblado C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe .

La fase de instalación se completó con éxito, y la fase de confirmación es comenzando.

Ver el contenido del archivo de registro para el C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ progreso de depuración \ TestService.exe de montaje.

El archivo se encuentra en C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.

Conjunto de confirmación 'C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe'.

parámetros afectados son:

logtoconsole =

logfile = C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService. InstallLog

assemblypath = C: \ Users \ miusuario \ documentos \ Visual Studio 2010 \ Projects \ TestServ hielo \ TestService \ obj \ x86 \ Debug \ TestService.exe

No se encontraron instaladores públicos con el atributo RunInstallerAttribute.Yes en el ensamblado C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe .

Quite el archivo InstallState porque no hay instaladores.

La fase de compromiso se completó con éxito.

La transacción finalizó.

de salida de la etapa 5

El nombre del servicio no es válida.

Más ayuda está disponible escribiendo NET HELPMSG 2185.

Respuesta

209

Debe abrir el archivo Service.cs en el diseñador, haga clic derecho y seleccione la opción de menú "Agregar instalador".

No se instalará nada más sacarlo de la caja ... primero debe crear la clase de instalador.

alguna referencia en el servicio al instalador:

How to: Add Installers to Your Service Application

bastante viejo ... pero esto es lo que estoy hablando:

Windows Services in C#: Adding the Installer (part 3)

Al hacer esto, un ProjectInstaller.cs será creado automáticamente. A continuación, puede hacer doble clic en este, introduzca el diseñador, y configurar los componentes:

  • serviceInstaller1 tiene las propiedades del propio servicio: Description, DisplayName, ServiceName y StartType son los más importantes.

  • serviceProcessInstaller1 tiene esta importante propiedad: Account thas es la cuenta en la que se ejecutará el servicio.

Por ejemplo:

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem; 
+3

Agregando el instalador y estableciendo la cuenta en LocalSystem, lo hizo. ¡Gracias! – Luc

+0

Recibo el mismo error en VS2013. Revisé los enlaces que me proporcionó, verifiqué que tenía ProjectInstaller, incluido el servicio de componentes [Process] Installer1, configurado correctamente. Ejecuto installutil.exe como administrador. Todavía informa "No se encontraron instaladores públicos con el atributo RunInstallerAttribute.Yes". ¿Algunas ideas? –

+4

Lol. Me encanta que el enlace "Muy viejo" sea para un sitio llamado Código Arcano. Cuanto más antigua sea esa página, más verdadero será el nombre :-) – HotN

10

cuanto a:

No hay instaladores públicas con las RunInstallerAttribute.Yes atributo se podían encontrar en el directorio C: \ Users \ miusuario \ Documentos \ El ensamblado de Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe.

Parece que no tiene una clase de instalador en su código. Esta es una clase que hereda de Installer que le indicará a installutil cómo instalar su ejecutable como un servicio.

P.s. Tengo mi propia pequeña plantilla de servicio de Windows autoinstalable/depurable de la que puede copiar el código o utilizar: Debuggable, Self-Installing Windows Service

+0

Cuando clic derecho en el proyecto TestService en Visual Studio -> Propiedades -> Servicios, la página está desactivada ... ¿se refería a una ubicación diferente? En Aplicación, el nombre del ensamblado es TestService. – jkh

+0

@John: Ignora la primera parte sobre la consola de servicios, mira la segunda parte que comienza con * En realidad *. Parece que el servicio nunca se instaló porque no encontró un instalador. –

2

dos problemas típicos:

  1. Missing ProjectInstaller la clase (como se ha señalado @MiguelAngelo)
  2. el símbolo del comando debe “Ejecutar como Administrador "
2

Otro posible problema (que me encontré):

Asegúrese de que la clase es ProjectInstallerpublic. Para ser honesto, no estoy seguro de cómo es exactamente lo hice, pero he añadido controladores de eventos a ProjectInstaller.Designer.cs, como:

this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);

supongo durante el proceso automático de creación de la función de controlador en ProjectInstaller.cs cambió la clase definición de

public class ProjectInstaller : System.Configuration.Install.Installer

a

partial class ProjectInstaller : System.Configuration.Install.Installer

reemplazando la palabra clave public con partial. Por lo tanto, con el fin de solucionarlo debe ser

public partial class ProjectInstaller : System.Configuration.Install.Installer

utilizo Visual Studio 2013 edición de la comunidad.

6

Aquí hay una forma alternativa de crear el instalador y deshacerse de ese mensaje de error. También parece que VS2015 express no tiene el elemento de menú "Agregar instalador".

Simplemente necesita crear una clase, agregar el código siguiente y agregar la referencia System.Configuration.Install.dll.

using System.Configuration.Install; 
using System.ServiceProcess; 
using System.ComponentModel; 


namespace SAS 
{ 
    [RunInstaller(true)] 
    public class MyProjectInstaller : Installer 
    { 
     private ServiceInstaller serviceInstaller1; 
     private ServiceProcessInstaller processInstaller; 

     public MyProjectInstaller() 
     { 
      // Instantiate installer for process and service. 
      processInstaller = new ServiceProcessInstaller(); 
      serviceInstaller1 = new ServiceInstaller(); 

      // The service runs under the system account. 
      processInstaller.Account = ServiceAccount.LocalSystem; 

      // The service is started manually. 
      serviceInstaller1.StartType = ServiceStartMode.Manual; 

      // ServiceName must equal those on ServiceBase derived classes. 
      serviceInstaller1.ServiceName = "SAS Service"; 

      // Add installer to collection. Order is not important if more than one service. 
      Installers.Add(serviceInstaller1); 
      Installers.Add(processInstaller); 
     } 
    } 
} 
+0

También se ejecuta VS2015 y esta solución me ayudó a superar el mensaje de error "No hay instaladores públicos con el RunInstallerAttribute.Si" que recibía anteriormente. ¡Gracias! – PHBeagle

1

sigilo Cambio en VS 2010 y .NET 4.0 y posterior

No hay instaladores públicas con las RunInstallerAttribute.Yes atributo se podían encontrar

Hay un cambio de alias o limpieza compilador en .NET que puede revelar este pequeño ajuste para su caso específico.

Si tiene el siguiente código ...

RunInstaller(true) // old alias 

Es posible que tenga que actualizar a

RunInstallerAttribute(true) // new property spelling 

Es como un alias cambiado bajo las sábanas en tiempo de compilación o en tiempo de ejecución y se hará obtener este comportamiento de error El cambio explícito anterior a RunInstallerAttribute (true) lo solucionó en todos nuestros escenarios de instalación en todas las máquinas.

Después de agregar proyecto o servicio de instalación a continuación, comprobar la “vieja” RunInstaller (verdadero) y el cambio a la nueva RunInstallerAttribute (verdadero)

+0

Según mi conocimiento, puede omitir el postfijo "Atributo", es decir [RunInstaller (true)] y [RunInstallerAttribute (true)] es el mismo. Pruébalo con un atributo diferente, p. [DebuggerStepThrough()] y [DebuggerStepThroughAttribute()]: ambos funcionarán cuando se apliquen a una clase. – Matt

Cuestiones relacionadas