115 votes

System.BadImageFormatException : Impossible de charger un fichier ou un assemblage (depuis installutil.exe)

J'essaie d'installer un service Windows à l'aide de InstallUtil.exe et j'obtiens le message d'erreur suivant

System.BadImageFormatException : Impossible de charger le fichier ou l'assemblage ' {xxx.exe} ou l'une de ses dépendances. Une tentative a été faite pour charger un programme dont le format est incorrect.

Qu'est-ce qui se passe ?


EDIT : (Pas par l'OP) Le message complet a été extrait de dup qui obtient beaucoup plus de visites [pour la googlelisation] :

C:\Windows\Microsoft.NET\Framework64\v4.0.30319 >InstallUtil.exe C:\xxx.exe Utilitaire d'installation de Microsoft (R) .NET Framework Version 4.0.30319.1 Copyright (c) Microsoft Corporation. Tous droits réservés.

Une exception s'est produite lors de l'initialisation de l'installation : System.BadImageFormatException : Impossible de charger le fichier ou l'assemblage 'file:/// C:\xxx.exe ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect

163voto

Ruben Bartelink Points 23945

Quelques détails supplémentaires pour être complet, au cas où cela aiderait quelqu'un...

Notez que la raison la plus courante de cette exception est la tentative de charger un programme spécifique au 32 bits ( /platform:x86 ) dans un processus 64 bits ou vice versa (c'est-à-dire charger une DLL spécifique à 64 bits ( /platform:x64 ) DLL dans un processus qui est 32 bit). Si votre platform est non spécifique ( /platform:AnyCpu ), cela ne se produira pas (en supposant qu'aucune dépendance référencée n'est de mauvaise qualité).

En d'autres termes, courir :

%windir% \Microsoft.NET\Framework\v2.0.50727\installutil.exe

ou :

%windir% \Microsoft.NET\Framework 64 \v2.0.50727\installutil.exe

ne fonctionnera pas (substitut dans d'autres versions du framework : v1.1.4322 (32 bits seulement, donc ce problème ne se pose pas) et v4.0.30319 comme souhaité dans l'exemple ci-dessus).

Évidemment, comme indiqué dans l'autre réponse, il faut également connaître le numéro de version .NET de l'application. installutil que vous exécutez doit être >= (de préférence =) celle du fichier EXE/DLL dont vous exécutez le programme d'installation.

Enfin, notez que dans Visual Studio 2010, l'outillage générera par défaut des binaires x86 ( plutôt que Toute unité centrale comme précédemment ).

Détails complets de System.BadImageFormatException (Dire que la seule cause est une morsure mal assortie est vraiment une simplification excessive !)

Une autre raison pour un BadImageFormatException dans le cadre d'un x64 est que dans Visual Studio 2010, la valeur par défaut .vdproj Le type de projet d'installation génère un fichier 32 bits InstallUtilLib cale, même sur un système x64 (Recherchez "64-bit managed custom actions throw a System.BadImageFormatException exception" sur la page).

1 votes

J'ai eu le même problème, lorsque j'ai commencé à déboguer selon ce que vous avez dit ci-dessus, j'ai trouvé que Platform : était défini comme x86. Quand je l'ai changé en Any CPU, cela a fonctionné :)

0 votes

J'ai mon installateur Windows avec des actions personnalisées. Mon installation doit fonctionner sur un système x64, donc les propriétés des actions personnalisées doivent cocher l'option "Run64Bit" en vrai. Cela a résolu mon problème.

16voto

Epaga Points 12717

Assurez-vous que le Framework le plus récent (celui avec lequel vous avez compilé votre application) est le premier dans le PATH. Cela a résolu le problème pour moi. (Trouvé sur un forum )

0 votes

Ce lien semble avoir disparu. Pas trop surprenant cependant. Il y a 6 ans.

3 votes

1 votes

J'aurais aimé que ce soit mieux s'ils nous montraient quel chemin ils ont pris... Je me débats avec ça depuis 2 heures...

9voto

Sachin Kalia Points 44

Je pense que vous utilisez la version 64 bits de l'outil pour installer une application 32 bits. J'ai également été confronté à ce problème aujourd'hui et j'ai utilisé ce chemin Framework pour installer .

C:\Windows\Microsoft.NET\Framework\v4.0.30319

et il devrait installer votre application 32 bits sans problème.

0 votes

C'était le scénario pour moi. Réponse très utile.

0 votes

Au moins lier la réponse originale : stackoverflow.com/revisions/5229405/1

7voto

James Crowther Points 31

OK, voici le problème que j'ai rencontré, et ce qui l'a résolu, semble très pertinent pour ce qui précède.

J'utilise Visual Studio 2010 Express. J'ai écrit un service de test qui n'a pas vraiment fait quelque chose. C'était juste un entraînement pour la vraie chose plus tard.

J'ai écrit le service et j'ai essayé de l'installer en utilisant installutil.exe et j'ai obtenu l'erreur suivante :

System.BadImageFormatException : Impossible de charger le fichier ou l'assemblage '{filename.exe}' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme dont le format est incorrect.

Jusqu'ici, la même chose que l'auteur original.

L'observation de Ruben ci-dessus concernant la sortie 32 bits de Visual Studio 2010 a été le sauveur ici.

J'ai utilisé la version 64 bits du installutil.exe et bien sûr, la sortie de la construction de Visual Studio 2010 était 32-bit. Pour ajouter une petite valeur supplémentaire, vous pouvez trouver la version 32 bits de la dernière version du framework .NET et les fichiers associés. installutil.exe dans le C:\Windows\Microsoft.NET\framework dossier. En utilisant cette version du installutil.exe a réglé mon problème ; le service s'est installé sans problème !

J'espère que cela aidera quelqu'un d'autre.

0 votes

Je ne sais pas ce que vous entendez par la version 32 bits mais j'ai essayé celle qui se trouve ici et elle n'a pas non plus fonctionné. C:\Windows\Microsoft.NET\Framework\v2.0.50727

1voto

Joseph Snow Points 537

Au cas où cela aiderait quelqu'un, j'ai pu corriger cette même exception en utilisant cette réponse à une question similaire, mais je n'ai pas obtenu l'exception en utilisant installutil.exe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X