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

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

C:WINDOWSMicrosoft.NETFramework64v2.0.50727installutil.exe MyService.exe >> installLog.txt

Il échoue. Quand je regarde le installLog.txt, je reçois 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 l'installation d'un assemblage différent. Je pense que c'est peut-être parce que celui qui échoue a été écrit pour. NET 4.0, et celui qui fonctionne est en 3.5.

Quelqu'un a une expérience avec ce problème?

24
demandé sur Hakam Fostok 2010-11-18 18:41:03

9 réponses

Vous utilisez le mauvais 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

39
répondu Darryl Braaten 2017-06-02 10:22:27

Personne n'est même venu près d'obtenir celui-ci!

Voici ce que je devais faire:

  1. Cliquez avec le bouton droit sur le projet de service dans Visual Studio, allez dans "Propriétés"
  2. définissez "Startup object" sur le nom du service (il avait été défini sur la valeur "(not Set)").
  3. Enregistrer.
  4. Construire
  5. Essayez d'installer à nouveau.
  6. ça marche! Yay!!! On peut tous rentrer à la maison!

Lien vers l'article code du projet {[20] } qui a aidé:

25
répondu SuperNES 2017-06-02 10:24:20

Pour ceux d'entre vous qui ne trouvez pas que cela résout leur problème, vous devez regarder dans les conditions de Lancement de la .fichier vdproj et changer le. Net framework à 4: http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception/

15
répondu Stu 2011-07-25 13:24:32

Si vous compilez sur une machine x64, assurez-vous d'aller dans Configuration Mgr et changez la construction en x64. Bien sûr, vous voudriez vérifier pour vous assurer que vous utilisez la bonne version D'InstallUtil.EXE. g'luck.

5
répondu oj_n 2011-11-18 02:55:37

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

3
répondu user3447136 2016-09-21 15:03:05

Avez-vous simplement essayé de taper MyService.exe /install dans une fenêtre D'invite de commande dans le répertoire contenant votre service Windows? Qui a fonctionné pour moi dans le passé. Vous pouvez également désinstaller un service Windows à l'aide de MyService.exe /uninstall.

1
répondu Bernard 2010-11-18 16:22:39

Je crois que vous fournissez la réponse dans votre question:

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

Donc, vous avez peut-être compilé le runtime avec des fonctions plus récentes (qui sont dans des Frameworks plus récents) mais l'ordinateur sur lequel vous l'enregistrez exécute une version inférieure.

Par exemple. compiler pour. Net 3.5 mais installer le service par la suite sur un. net 2.0 n'aurait pas de sens.

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

0
répondu BerggreenDK 2010-11-18 15:52:16

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

J'utilise également ce fichier batch 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
répondu Alejandro del Río 2015-09-01 21:06:11

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 des DLL 32 bits et que votre serveur est un serveur 64 bits.

0
répondu Aviva 2017-07-11 19:22:03