BadImageFormatException - Wie vorgehen?

11/08/2008 - 17:15 von Sebastian K. | Report spam
Hallo zusammen,

ich habe ein kleines Problem auf einem Win2k System (ja, schlimm
genug, dass es die noch gibt... aber immerhin hat es alle Updates...)
eines Kunden.

In meiner C# Anwendung füge ich in der Program.cs in der static void
Main Methode einen Application.ThreadException EventHandler hinzu.
Dieser wirft direkt nach Programmstart eine BadImageFormatException:

"System.BadImageFormatException: Das Betriebssystem kann nicht
ausführen. (Exception from HRESULT: 0x800700B6)
at MeinProjekt.MeinForm.MeinFormLoad(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
..."

Ich habe in meinem Projekt mehrere dlls einkompiliert und ein paar
auch nur im Verzeichnis liegen. Manche sind managed, manche nicht.
Jetzt weiss ich nicht genau wie ich herausfinden soll, welche auf dem
System dort die Probleme bereitet.

Gibt es eine Möglichkeit die BadImageFormatException "global" wie die
Application.ThreadException abzufangen? Oder soll ich einfach den
gesamten Inhalt meiner MeinFormLoad-Methode in einen try-catch Block
mit einer BadImageFormatException packen? Oder doch was anderes
probieren?

Mit freundlichem Gruß
Sebastian
 

Lesen sie die antworten

#1 Frank Dzaebel
11/08/2008 - 19:02 | Warnen spam
Hallo Sebastian,

Dieser wirft direkt nach Programmstart eine
BadImageFormatException:



Also das könnte z.B. dadurch enstanden sein:

try
{
Assembly a = Assembly.Load("calc");
}
catch (BadImageFormatException e)
{
Console.WriteLine(e.Message);
}

Also beim Versuch eine unmanaged
Exe zu laden. Und das sieht nach Deiner
Beschreibung auch wahrscheinlich aus.


Gibt es eine Möglichkeit die BadImageFormatException
"global" wie die Application.ThreadException abzufangen?
Oder soll ich einfach den
gesamten Inhalt meiner MeinFormLoad-Methode in
einen try-catch Block mit einer
BadImageFormatException packen?



Ja, beides, und wenn das noch nicht reicht
ggf. noch die UnhandledException abfangen
und *zusàtzlich* im Main schon den globalen
try-catch einbauen (vor dem Form-Konstruktor).

Ansonsten ist auch folgendes in diesem
Szenario sinnvoll:

[Assembly Binding Log Viewer-Tool (Fuslogvw.exe)]
http://msdn.microsoft.com/de-de/lib...a18c4.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen