Cuando creo un nuevo servicio de Windows en Visual Studio 2010, recibo el mensaje que indica que use InstallUtil y net start para ejecutar el servicio.
He intentado los siguientes pasos:
- Crear nuevo archivo de proyecto -> Nuevo -> Proyecto -> Servicio de Windows
- Nombre del proyecto: TestService
- Proyecto de compilación tal como está (constructor Service1, OnStart, OnStop)
- Abra el símbolo del sistema, ejecute "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe
- Ejecute net start TestService .
Salida del paso 4
Ejecutando una instalación realizada.
Comienzo de la fase de instalación de la instalación.
Consulte el contenido del archivo de registro para el progreso del ensamblado C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe.
El archivo se encuentra en C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Instalación del ensamblado 'C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Los parámetros afectados son:
logtoconsole =
archivo de registro = C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog
assemblypath = C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
No se encontraron instaladores públicos con el atributo RunInstallerAttribute.Sí en el ensamblaje 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 está comenzando.
Consulte el contenido del archivo de registro para el progreso del ensamblado C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe.
El archivo se encuentra en C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Confirmación del ensamblado 'C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Los parámetros afectados son:
logtoconsole =
archivo de registro = C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog
assemblypath = C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
No se encontraron instaladores públicos con el atributo RunInstallerAttribute.Sí en el ensamblaje C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe.
Elimine el archivo InstallState porque no hay instaladores.
La fase de confirmación se completó con éxito.
La instalación realizada se ha completado.
Salida del paso 5
El nombre del servicio no es válido.
Hay más ayuda disponible escribiendo NET HELPMSG 2185.
Mirando a:
Parece que es posible que no tenga una clase de instalador en su código. Esta es una clase que hereda de
Installer
eso le diráinstallutil
cómo instalar su ejecutable como servicio.Ps tengo mi propio pequeño plantilla de auto-instalación / depurable servicio de Windows aquí que se puede copiar código de o uso: depurable, con instalación automática de servicios de Windows
fuente
Aquí hay una forma alternativa de hacer 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 y agregar el siguiente código y agregar la referencia System.Configuration.Install.dll.
fuente
Dos problemas típicos:
fuente
Otro posible problema (con el que me encontré):
Asegúrate de que la
ProjectInstaller
clase seapublic
. Para ser honesto, no estoy seguro de cómo lo hice exactamente, pero agregué controladores de eventosProjectInstaller.Designer.cs
, como:this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
Supongo que durante el proceso automático de creación de la función de controlador
ProjectInstaller.cs
, cambió la definición de clase depublic class ProjectInstaller : System.Configuration.Install.Installer
a
partial class ProjectInstaller : System.Configuration.Install.Installer
reemplazando la
public
palabra clave conpartial
. Entonces, para arreglarlo debe serpublic partial class ProjectInstaller : System.Configuration.Install.Installer
Yo uso Visual Studio 2013 Community edition.
fuente
Cambio de sigilo en VS 2010 y .NET 4.0 y posterior
No se encontraron instaladores públicos con el atributo RunInstallerAttribute. Sí.
Hay un cambio de alias o limpieza del compilador en .NET que puede revelar este pequeño ajuste para su caso específico.
Si tiene el siguiente código ...
Es posible que deba actualizarlo a
Es como un alias cambiado bajo las cubiertas en tiempo de compilación o en tiempo de ejecución y obtendrá este comportamiento de error. El cambio explícito anterior a RunInstallerAttribute (verdadero) lo solucionó en todos nuestros escenarios de instalación en todas las máquinas.
Después de agregar el instalador del proyecto o servicio, compruebe el RunInstaller "antiguo" (verdadero) y cámbielo al nuevo RunInstallerAttribute (verdadero)
fuente
Sin embargo, me encontré con otro problema: asegúrese de que su clase derivada del instalador (normalmente
ProjectInstaller
) esté en la parte superior de la jerarquía del espacio de nombres, intenté usar una clase pública dentro de otra clase pública, pero esto da como resultado el mismo error anterior:No se encontraron instaladores públicos con el atributo RunInstallerAttribute. Sí.
fuente