2013-08-02 9 views
11

Ich habe eine C# -Anwendung, die auf einem 32-Bit-Windows XP-Computer mit Visual Studio 2005 geschrieben wurde. Die Anwendung läuft auf Windows XP-Computern, aber wenn ich versuche, es auf einem 64-Bit-Windows auszuführen 7 professionelle Maschine, bekomme ich die folgende Dialog-Box beim Start:.net Framework Fehler (HRESULT 0x8007000B)

enter image description here

Hier der vollständige Text aus den Details.

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box. 

************** Exception Text ************** 
System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) 
    at ICSNeoCSharp.IcsNeoDll.icsneoTxMessages(Int32 hObject, IcsSpyMessage& pMsg, Int32 lNetworkID, Int32 lNumMessages) 
    at ICSNeoCSharp.FormDTCApplication.transmitFlowControl(Int32 myArbID) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 1750 
    at ICSNeoCSharp.FormDTCApplication.flowControlTimer_Tick(Object sender, EventArgs e) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 5166 
    at System.Windows.Forms.Timer.OnTick(EventArgs e) 
    at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 


************** Loaded Assemblies ************** 
mscorlib 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.5472 (Win7SP1GDR.050727-5400) 
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll 
---------------------------------------- 
DTC Checker V1.0 
    Assembly Version: 1.0.4960.25549 
    Win32 Version: 1.0.4960.25549 
    CodeBase: file:///C:/DTC%20Checker%20V1.0%20R3/DTC%20Checker%20V1.0%20R3.exe 
---------------------------------------- 
System.Windows.Forms 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.5468 (Win7SP1GDR.050727-5400) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
---------------------------------------- 
System 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 
---------------------------------------- 
System.Drawing 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
---------------------------------------- 
Microsoft.Office.Interop.Excel 
    Assembly Version: 12.0.0.0 
    Win32 Version: 12.0.6600.1000 
    CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.Office.Interop.Excel/12.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Excel.dll 
---------------------------------------- 

************** JIT Debugging ************** 
To enable just-in-time (JIT) debugging, the .config file for this 
application or computer (machine.config) must have the 
jitDebugging value set in the system.windows.forms section. 
The application must also be compiled with debugging 
enabled. 

For example: 

<configuration> 
    <system.windows.forms jitDebugging="true" /> 
</configuration> 

When JIT debugging is enabled, any unhandled exception 
will be sent to the JIT debugger registered on the computer 
rather than be handled by this dialog box. 

Hat jemand anderen diesen Fehler gefunden und es erfolgreich gelöst?

+0

laufen Sie die EXE oder Lösung erhalten? – Arshad

+0

exe. Ich habe kein Visual Studio auf dem Windows 7-Rechner. –

+0

Haben Sie Ihre Exe für x64 Computer – Arshad

Antwort

13

Während Ihre Hauptanwendung für AnyCPU gebaut werden kann, sind Sie sicher, dass alle Baugruppen AnyCPU sind? Verfügen Sie über systemeigene Assemblys oder Assemblys, die systemeigenen Code enthalten? Sind sie gegen x86 gebaut?

file: /// C: /Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll

Das sagt mir, dass die App als x64-Prozess ausgeführt wird, aber es scheint, dass es eine Assembly, die nicht AnyCPU oder x64 ist, die wahrscheinlich die Ursache der BadImageFormatException ist.

Eine Sache, die Sie versuchen können, besteht darin, die Anwendung von einer 32-Bit-Eingabeaufforderung (c: \ Windows \ SysWow64 \ cmd.exe) ausführen, um es zu einem 32-Bit-Prozess zu zwingen, und sehen, ob das funktioniert. Wenn das funktioniert, dann gibt es definitiv eine Assembly, die nicht AnyCPU ist.

+0

Ich habe versucht, es in der Befehlszeile auszuführen, aber das hat nicht funktioniert. Ich denke, Sie sind auf etwas mit einer Baugruppe, die nicht in 64-Bit funktioniert. Gibt es überhaupt eine 32-Bit-Assembly-Datei in 64 Bit? –

+2

Ich baute das Projekt in x86 und es funktionierte. –

1

Aus meiner Erfahrung ist die Ursache dieses Fehlers ist das .Net Framework Version

Überprüfen Sie die .Net Framework Version und Update und auch Prüfung der .Net-Version Ihrer Anwendung.

3

Projekteigenschaften -> Build -> Plattform Ziel -> x86 kann dieses Problem lösen.

+0

das löste mein Problem. – Tommix

1

In meinem Fall habe ich, weil die App den 0x8007000B Fehler hatte lief in 32 Bit, auf meinem 64 Windows 7. Ich löste es, indem ich in Windows/syswov64 Ordner änderte die MSVCR110.dll Version 64 Bit mit der MSVCR110.dll Version 32 Bit.

(Vergessen Sie nicht, die 64 dll nach, setzen Sie die dll 32 jedes Mal zurück, wenn Sie Ihre 32-Bit-App ausführen müssen).

Sie können die DLL-Versionen here (Entpacken Sie es vor dem Einfügen in den Syswov64-Ordner) finden.

0

Ich möchte auch meinen Befund hinzufügen: Ich habe in einem Projekt Eigenschaften in Build Registerkarte ein "Prefer 32-Bit" deaktiviert und habe diesen Fehler. Nach der Überprüfung war es weg. Ich habe eine beliebige CPU als Ziel festgelegt.

Ich bin mir bewusst, dass dies keine definitive Lösung ist, nur eine Symptomlösung, aber es könnte hilfreich sein.

0

Die Lösung für mich war, den Anwendungspool in IIS zu ändern. Öffnen Sie die Eigenschaften des Anwendungspools und gehen Sie zu Erweiterte Einstellungen ... Ändern Sie dann "32-Bit-Anwendungen aktivieren" in "Ja". Der Standardwert ist False für einen neuen Wert.Der Code-Teil wurde auf "Any CPU" gesetzt, obwohl ich Probleme in der Vergangenheit durch Setzen der CPU auf x86 behoben habe.

0

Einer der häufigsten Fehler ist, dass wir vergessen haben, das Testprogramm und Wrapper-Programm auf die richtige Plattform zu ändern. Siehe unten stehende Bild

enter image description here

(in der oberen Leiste wird die Plattform zeigt ist x64, aber Sie müssen sicherstellen, ob es wirklich in der 2. Bild vorhanden ist ...)

enter image description here

Stellen Sie sicher, dass Sie im Configuration Manager die richtige Konfiguration haben ... Wenn Ihre Konfiguration nicht mit der tatsächlichen Konfiguration Ihrer C++ - DLL übereinstimmt, wird BadImageFormatException ausgegeben.

ich aus dem Fehler gelernt nach viel suchen ... und endlich diese in x64