安装服务时出现System.BadImageFormatException

时间:2013-10-23 12:47:22

标签: c# visual-studio-2010

当我尝试运行安装程序来设置服务时,我遇到异常:

# ./InstallUtil ../../../../Applications/GasPosApp/bin/Wrapper.exe -s ../../../
../Applications/GasPosApp/properties/DispenserViewerApplication.wrapper.conf
Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

初始化安装时发生异常:

System.BadImageFormatException: Could not load file or assembly 'file:///C:\Appl
ications\GasPosApp\bin\Wrapper.exe' or one of its dependencies. The module was e
xpected to contain an assembly manifest..

3 个答案:

答案 0 :(得分:12)

您必须使用正确版本的InstallUtil。如果您尝试安装32位服务(x86),请使用

c:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe

如果要安装64位服务(x64),请使用

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe

请注意,最后指定的文件夹(v4.0.30319)可能与机器不同。如果您只有该框架的oldere版本,则可以遇到以下文件夹之一 - v1.0.xxxx,v1.1.xxxx,v2.0.xxxxx,v3.0,v3.5。

答案 1 :(得分:3)

我同意这里的一切!如果您尝试以无效的操作系统格式加载应用程序或其中一个refreanced程序集,则会出现此错误。

http://msdn.microsoft.com/en-us/library/system.badimageformatexception(v=vs.80).aspx

  • 检查您的opearting系统格式? x86或x64
  • 检查项目构建配置?
  • 检查所有refreanced assebmlies(VERY IMPORTENET)如果你的加载的反射(DLL)是以错误的格式构建的,你也会得到这个错误(如果我错了,请纠正我!)。
  • 如果可能,请将您的VS buid配置更改为AnyCpu。

Microsoft创建了一个名为CorFlags的有用工具,可用于显示或设置托管程序集的目标平台。

C:\ Program Files \ Microsoft.NET \ SDK \ v2.0 \ Bin \ CorFlags.exe

语法:
CorFlags文件名

**anycpu** 
Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0 

**x86**
Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 3
ILONLY    : 1
32BIT     : 1
Signed    : 0 

**x64** 
Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32+
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0 

答案 2 :(得分:2)

这通常表示32位和64位之间不匹配。例如,如果将Wrapper.exe编译为x86并使用64位InstallUtil安装它,则进程无法加载32位Wrapper.exe程序集并将抛出BadImageFormatException

解决方案是使用位于.NET文件夹的InstallUtil(非Framework)子文件夹中的32位Framework64(例如C:\Windows\Microsoft.NET\v4.0.30319\Framework,如果您正在使用的话。 NET 4或4.5)。