2010-10-25 8 views
7

J'ai suivi les étapes here pour que mon service WCF existant (fonctionnant déjà correctement en tant qu'application console) soit également Windows Service, sur mon ordinateur Windows 7 qui est également mon ordinateur de développement.Service WCF en tant que service Windows (0) Windows 7

Peu importe ce que j'ai essayé, quand faire la dernière étape d'utilisation installutil, je reçois le message suivant dans la ligne de commande:

Exception est survenue lors de l'initialisation de l'installation:
System.BadImageFormatException: Impossible de charger le fichier ou l'assembly 'file: /// [path here]' ou l'une de ses dépendances.
Une tentative a été faite pour charger un programme avec un format incorrect ..

Je ma demande d'inscription de la console principale classe héritent de ServiceBase et mettre en œuvre OnStart et OnEnd méthodes.

J'ai ajouté ProjectInstaller classe héritant de System.Configuration.Install.Installer marqué avec l'attribut [RunInstaller(true)] et avec le code fourni dans le constructeur.

Ce que j'ai déjà essayé cela n'est pas mentionné dans l'article ci-dessus?

  1. L'exécution de la ligne de commande en tant qu'administrateur
  2. Navigation dans le répertoire où le fichier EXE est situé et en cours d'exécution installutil à partir de là
  3. Donner clé forte dans le fichier EXE et toutes les DLL qu'il utilise

En outre, je ne reçois aucun fichier journal même en le spécifiant avec /LogFile=myLog.txt.

Toutes les idées sont les bienvenues, merci.

+0

Cela peut sembler évident, mais assurez-vous que le InstallUtil.exe est de la version correcte de .Net. Parfois, la variable d'environnement path pointe vers une autre version de .Net, et dans ce cas, vous obtiendrez cette erreur. –

+0

Merci, j'ai explicitement ajouté le chemin du dossier .NET 4 au chemin global de Windows et mon code est également .NET 4, ce n'est donc pas le cas. –

Répondre

6

Cela sent comme un problème 32/64-bit.

Est-ce que votre machine Windows 7 64 bits par hasard ?? Est-ce que votre service fait référence quelque part à quelque chose de 32 bits, comme un ancien composant COM ou quelque chose?

Vous pourriez avoir besoin de compiler vos affaires avec la plate-forme x86 dans Visual Studio pour faire fonctionner correctement ...

+1

Juste sur place! Je n'aurais jamais deviné. Mon ordinateur est en 64 bits mais nulle part dans le code je ne fais référence à quelque chose de 32 bits, aucun composant COM .. peut-être que la valeur par défaut est 32 bits n'a jamais eu la chance de vérifier. –

3

exceptions BadImageFormat se produisent généralement lorsque l'ensemble est chargé dans une ancienne version du framework .NET (4.0 assemblage sur une machine sans 4.0). Puisque vous déployez sur la même machine, je suppose que vous n'utilisez pas la bonne version de installutil.

Assurez-vous que vous utilisez le installutil situé ici: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319

+1

Merci, votre message m'a guidé à la solution: J'utilisais l'installutil de C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 au lieu de la version 32 bits: S –

+1

+1 J'utilisais cette version de installutil mais "build-> platform target" dans mon projet de service Windows a été défini sur x86 au lieu de x64. Une fois que j'ai changé cela, ça a marché pour moi. –

Questions connexes