2010-10-25 39 views
7

Seguí los pasos here para hacer que mi servicio WCF existente (que ya funciona bien como aplicación de consola) también sea Windows Service, en mi máquina Windows 7 que también es mi máquina de desarrollo.WCF Service como Windows Service woes (Windows 7)

No importa lo que he intentado, al hacer la última etapa de utilizar installutil, estoy recibiendo el mensaje siguiente en la línea de comandos: Se ha producido

excepción al inicializar la instalación:
System.BadImageFormatException: No se pudo cargar el archivo o ensamblado 'file: /// [path here]' o una de sus dependencias.
Se ha intentado cargar un programa con un formato incorrecto ..

tengo mi aplicación de consola hereda la clase principal de la ServiceBase e implementar OnStart y OnEnd métodos.

He añadido ProjectInstaller clase que hereda de System.Configuration.Install.Installer marcado con [RunInstaller(true)] atributo y con el código que se suministran en el constructor.

¿Qué he intentado ya que no se menciona en el artículo anterior?

  1. Ejecución de la línea de comandos como administrador
  2. Navegando al directorio donde se encuentra el archivo EXE y funcionando installutil desde allí
  3. Dando fuerte clave para el archivo EXE y todos los DLL que está usando

Además, no obtengo ningún archivo de registro aunque lo especifique con /LogFile=myLog.txt.

Cualquier idea es bienvenida, gracias.

+0

Esto puede parecer obvio, pero asegúrese de que el InstallUtil.exe es de la versión correcta de .NET. A veces, la variable de entorno de ruta apunta a otra versión de .Net, y en ese caso obtendrá este error. –

+0

Gracias, he agregado explícitamente la ruta de la carpeta .NET 4 a la ruta global de Windows y mi código también es .NET 4, por lo que ese no es el caso. –

Respuesta

6

Eso huele como un problema de 32-/64 bits.

¿Es su máquina Windows 7 de 64 bits por casualidad? ¿Su servicio de alguna manera hace referencia a algo de 32 bits, como un antiguo componente COM o algo así?

Puede que sea necesario para compilar su materia con la plataforma x86 en Visual Studio para conseguir que funcione correctamente ...

+1

¡Justo en el lugar! Nunca lo hubiera adivinado. Mi máquina es de 64 bits, pero en ninguna parte del código hago referencia a nada de 32 bits, ningún componente COM ... tal vez el valor predeterminado es 32 bits que nunca tuve la oportunidad de verificar. –

3

excepciones BadImageFormat por lo general se producen cuando el ensamblado se carga en una versión anterior del marco .NET (4.0 ensamblaje en una máquina sin 4.0). Como está implementando en la misma máquina, supongo que no está utilizando la versión correcta de installutil.

Asegúrese de que utiliza la installutil se encuentra aquí: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319

+1

Gracias, su publicación me guió a la solución: estaba usando el installutil de C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 en lugar de la versión de 32 bits: S –

+1

+1 Estaba usando esa versión de installutil, pero "build-> platform target" en mi proyecto de servicio de Windows se configuró en x86 en lugar de x64. Una vez que cambié esto, funcionó para mí. –