I am trying to install a Windows service using InstallUtil.exe and am getting the error message
System.BadImageFormatException: Could not load file or assembly '
{xxx.exe}
' or one of its dependencies. An attempt was made to load a program with an incorrect format.
What gives?
EDIT: (Not by OP) Full message extracted from dup getting way more hits [for googleability]:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\xxx.exe Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved.
Exception occurred while initializing the installation: System.BadImageFormatException: Could not load file or assembly 'file:///C:\xxx.exe' or one of its dependencies. An attempt was made to load a program with an incorrect format..
My issue was different. This occurred after an unexpected shutdown of my windows 7 machine. I performed a clean solution and it ran as expected.
In the case of having this message in live tests, but not in unit tests, it's because selected assemblies are copied on the fly to
$(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\
. But sometime few assemblies can be not selected, eg., VC++ dlls in case of interop c++/c# projects.Post-build
xcopy
won't correct the problem, because the copied file will be erased by the live test engine.The only workaround to date (28 dec 2018), is to avoid Live tests, and do everything in unit tests with the attribute
[TestCategory("SkipWhenLiveUnitTesting")]
applied to the test class or the test method.This bug is seen in any Visual Studio 2017 up to 15.9.4, and needs to be addressed by the Visual Studio team.
Make sure the newest Framework (the one you compiled your app with) is first in the PATH. That solved the problem for me. (Found on a forum)
OK, this is the problem I had, and, what fixed it, seems very relevant to the above.
I am using Visual Studio 2010 Express. I wrote a test service that didn't really do anything. It was just practice for the real thing later.
I wrote the service and tried to install it using
installutil.exe
and got the following error:So far the same as the original author.
Ruben's observation above about the 32 bit output of Visual Studio 2010 was the saviour here.
I used the 64-bit version of the
installutil.exe
and sure enough, the output of the Visual Studio 2010 build was 32-bit. Just to add a little extra value here, you can find the 32-bit version of the latest .NET framework and the associatedinstallutil.exe
in the C:\Windows\Microsoft.NET\framework folder. Using this version of theinstallutil.exe
fixed my problem; the service installed without a hitch!I hope this helps someone else out there.
In case it helps anyone, I was able to fix this same exception using this answer to a similar question, but I did not get the exception from using installutil.exe.