System.BadImageFormatException: Impossible de charger le fichier ou l’assembly (à partir de installutil.exe)

J’essaie d’installer un service Windows en utilisant InstallUtil.exe et j’obtiens le message d’erreur

System.BadImageFormatException: Impossible de charger le fichier ou l’assembly ‘ {xxx.exe} ‘ ou l’une de ses dépendances. Une tentative de chargement d’un programme avec un format incorrect a été effectuée.

Ce qui donne?


EDIT: (pas par OP) Message complet extrait de dup obtenant bien plus de hits [pour googleability]:

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

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

Plus de détails pour être complet au cas où cela aiderait quelqu’un …

Notez que la raison la plus courante de cette exception est de tenter de charger une DLL 32 bits spécifique ( /platform:x86 ) dans un processus 64 bits ou inversement (c.-à-d. Charger une /platform:x64 64 bits spécifique /platform:x64 ) DLL dans un processus de 32 bits). Si votre platformplatform n’est pas spécifique ( /platform:AnyCpu ), cela ne se produira pas (en supposant qu’aucune dépendance référencée ne présente un /platform:AnyCpu incorrect).

En d’autres termes, en cours d’exécution:

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

ou:

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

ne fonctionnera pas (remplacez dans les autres versions du framework: v1.1.4322 (32 bits uniquement, donc ce problème ne se pose pas) et v4.0.30319 comme souhaité ci-dessus).

De toute évidence, comme indiqué dans l’autre réponse, il faudra également que le numéro de version .NET de l’ installutil vous utilisez soit> = (de préférence =) celui du fichier EXE / DLL que vous exécutez dans le programme d’installation.

Enfin, notez que dans Visual Studio 2010, l’outillage générera par défaut des fichiers binarys x86 ( plutôt que n’importe quel processeur, comme précédemment ).

Des détails complets sur System.BadImageFormatException (dire que la seule cause est que les erreurs d’adressage incompatibles sont vraiment une simplification flagrante!).

Une autre raison de BadImageFormatException sous un programme d’installation x64 est que, dans Visual Studio 2010, le .vdproj installation par défaut .vdproj génère une cale InstallUtilLib 32 bits, même sur un système x64 (Search for 64-bit). Exception BadImageFormatException “sur la page).

Assurez-vous que le plus récent Framework (celui avec lequel vous avez compilé votre application) est le premier dans le PATH. Cela a résolu le problème pour moi. Trouvé ici: http://www.issociate.de/board/post/280574/Installutil_System.BadImageFormatException.html

Je pense que vous utilisez la version 64 bits de l’outil pour installer une application 32 bits. J’ai également fait face à ce problème aujourd’hui et j’ai utilisé ce cadre pour répondre aux besoins.

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

et il devrait installer votre application 32 bits très bien.

Merci

Sachin Kalia

OK, c’est le problème que j’avais et, ce qui l’a corrigé, cela semble très pertinent par rapport à ce qui précède.

J’utilise Visual Studio 2010 Express. J’ai écrit un service de test qui n’a vraiment rien fait. Ce n’était que pratique pour la vraie chose plus tard.

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

System.BadImageFormatException: Impossible de charger le fichier ou l’assembly ‘{filename.exe}’ ou l’une de ses dépendances. Une tentative de chargement d’un programme avec un format incorrect a été effectuée.

Autant que l’auteur original.

L’observation de Ruben ci-dessus à propos de la sortie 32 bits de Visual Studio 2010 était le sauveur ici.

J’ai utilisé la version 64 bits du installutil.exe et, bien sûr, la sortie de Visual Studio 2010 était de 32 bits. Pour append une petite valeur supplémentaire, vous pouvez trouver la version 32 bits du dernier framework .NET et le installutil.exe associé dans le installutil.exe C: \ Windows \ Microsoft.NET \ framework . En utilisant cette version du installutil.exe j’ai résolu mon problème. le service installé sans anicroche!

J’espère que cela aide quelqu’un d’autre.

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 d’utilisation de installutil.exe.

J’ai eu le même problème. J’utilise la commande standard pour l’exécution. Il appelait le X64 ro contre les tests X86. Je devais spécifier le X86 et non la version X64 du nunit-runner.

En résumé, la plate-forme Build et Project \ Build \ Platform doivent être configurées sur x64 pour pouvoir installer le service 64 bits sur un système 64 bits.

Mon problème était différent. Cela s’est produit après un arrêt inattendu de ma machine Windows 7. J’ai effectué une solution propre et elle a fonctionné comme prévu.

Après avoir essayé toutes les solutions mentionnées, j’ai trouvé le PlatformTarget quelque sorte ajouté à la configuration de AnyCPU dans mon projet .csproj.

  pdbonly true bin\Release\ TRACE prompt 4 x64  

Supprimer la ligne a fonctionné pour moi.