2013-10-23 58 views
5

我得到以下異常時,當我嘗試運行安裝程序並設置服務:發生System.BadImageFormatException安裝服務

# ./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.. 
+1

當你混合32,拋出此異常和64位組件。嘗試編譯AnyCPU中的所有項目。 – Damien

+0

我只是從命令提示符運行這個。你可以請直到如何完成這一點? – user1280096

+0

@ user1280096您在答案中提供了所有需要的信息。只要使用其他版本的InstallUtil,你就會好的。 –

回答

9

你必須使用InstallUtil的正確版本。如果你想安裝32位服務(86),使用

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

,如果你安裝的是64位服務(64),使用

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

注意,即最後指定的文件夾( v4.0.30319)可能會使機器與機器不同。如果您只有可用的框架版本,則可能會遇到以下文件夾之一 - v1.0.xxxx,v1.1.xxxx,v2.0.xxxxx,v3.0,v3.5。

+0

我使用的是c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe來安裝32位服務。 – user1280096

+0

@ user1280096而你仍然有這個錯誤?我不這麼認爲。請確認你的服務真的是32位。 –

+0

是的,它真的是32位... – user1280096

2

這通常表示32位和64位之間不匹配。例如,如果Wrapper.exe編譯爲x86,並且使用64位InstallUtil進行安裝,則該進程無法加載32位Wrapper.exe程序集,並且會拋出BadImageFormatException

的解決方案是使用32位InstallUtil放置在.NET文件夾的Framework(未Framework64)子文件夾(例如C:\Windows\Microsoft.NET\v4.0.30319\Framework如果正在使用.NET 4或4.5)。

+0

是的我使用的框架不是framework64。 – user1280096

+0

我正在使用.NET 4。 – user1280096

3

我同意所有在這裏!如果您嘗試以無效的操作系統格式加載應用程序或其中一個refreanced程序集,則會出現此錯誤。

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

  • 檢查opearting系統格式? x86或x64
  • 檢查您的項目構建配置?
  • 檢查所有refreanced assebmlies(非常IMPORTENET)如果你的加載反射(DLL)的一個是以錯誤的格式構建的,你也會得到這個錯誤(糾正我,如果我錯了!)。
  • 如果可能,請將您的VS buid配置更改爲AnyCpu。

微軟創建了一個名爲CorFlags的有用工具,可以用來顯示或設置託管程序集的目標平臺。

C:\ Program Files文件\ Microsoft.NET \ SDK \ 2.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