web-dev-qa-db-fra.com

Pourquoi ne puis-je pas installer mon service (runtime plus récent que le runtime chargé)?

J'ai donc construit un service en C # et j'essaie d'utiliser la commande suivante pour l'installer:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe MyService.exe >> installLog.txt

Il échoue. Quand je regarde le fichier installLog.txt, j'obtiens ceci:

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation.  All rights reserved.

Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or Assembly 'file:///C:\MyService.exe' or one of its dependencies. This Assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded..

La même approche fonctionne bien pour installer un autre assemblage. Je pense que c'est peut-être parce que celui qui a échoué a été écrit pour .NET 4.0, et celui qui fonctionne est dans la version 3.5.

Quelqu'un at-il une expérience avec ce problème?

24
SuperNES

Personne ne s'est même approché de celui-ci!

Voici ce que je devais faire:

  1. Cliquez avec le bouton droit sur le projet de service dans Visual Studio, puis sélectionnez "Propriétés".
  2. Définissez "Objet de démarrage" sur le nom du service (la valeur "(Non défini)" avait été définie).
  3. Sauvegarder.
  4. Construire
  5. Essayez d'installer à nouveau.
  6. Ça marche! Yay! Nous pouvons tous rentrer à la maison!

Lien vers l'article du projet code qui a aidé:

25
SuperNES

Vous utilisez le mauvais fichier installutil.exe Si votre application est construite sur .Net 4.0. Utilisez le installutil.exe dans le dossier 4.0.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe

41
Darryl Braaten

Pour ceux d'entre vous qui ne constatent pas que cela résout leur problème, vous devez consulter les conditions de lancement du fichier .vdproj et modifier le cadre .NET en 4: http://www.alexjamesbrown.com/uncategorized/ deploying-net-4-project-error-1001-system-badimageformatexception/

15
Stu

Si vous compilez sur un ordinateur x64, assurez-vous d’aller dans Gestionnaire de configuration et de modifier la construction en x64. Vous voudrez bien sûr vérifier que vous utilisez la bonne version de InstallUtil.exe. allez-y.

5
oj_n

Pour moi, j'ai juste cliqué à droite sur l'exe que j'essayais d'installer et j'ai cliqué sur "Débloquer"

4
user3447136

Je crois que vous apportez la réponse à votre question:

"Cet assemblage est construit par un runtime plus récent que le runtime actuellement chargé et ne peut pas être chargé."

Ainsi, vous avez peut-être compilé le runtime avec des fonctions plus récentes (qui se trouvent dans de nouveaux frameworks), mais l'ordinateur sur lequel vous l'enregistrez utilise une version plus basse.

Par exemple. compiler pour .NET 3.5 mais installer ensuite le service sur un .NET 2.0 n’aurait pas de sens.

Étant donné que vous pouvez installer des services sur la machine de destination, je suppose que vous êtes déjà administrateur. Il suffit donc de mettre à niveau le framework .NET sur cette machine de service.

0
BerggreenDK

J'ai eu le même problème. Au début, mon projet était dans un très long chemin sur D:\à l'intérieur du dossier de débogage de mon projet . Le problème a été résolu lorsque j'ai déplacé le fichier de service .exe vers un autre emplacement avec un chemin plus court "C: \". 

J'utilise aussi ce fichier de commandes pour installer mes services

@ECHO OFF

REM Directory for .NET 4. Check for other version directories.
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%

echo Installing MyService...
echo ---------------------------------------------------
InstallUtil /i C:\ServiceFolder\MyService.exe
echo ---------------------------------------------------
echo Done.
pause
0
Alejandro del Río

Avez-vous essayé simplement de taper MyService.exe /install dans une fenêtre d'invite de commandes du répertoire contenant votre service Windows? Cela a fonctionné pour moi dans le passé. Vous pouvez également désinstaller un service Windows en utilisant MyService.exe /uninstall.

0
Bernard

Si vous avez essayé tout ce qui précède et que vous voyez toujours la même erreur, vérifiez si vous avez une application 32 bits ou une DLL 32 bits et si votre serveur est un serveur 64 bits. 

0
Aviva