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?
Personne ne s'est même approché de celui-ci!
Voici ce que je devais faire:
Lien vers l'article du projet code qui a aidé:
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
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/
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.
Pour moi, j'ai juste cliqué à droite sur l'exe que j'essayais d'installer et j'ai cliqué sur "Débloquer"
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.
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
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
.
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.