Frage

Das ist seltsam. Ich habe eine WPF-Anwendung, die einfach gut in XP funktioniert, wenn die DPI auf 96 gesetzt ist, aber es funktioniert nicht mit ihn auf 120 gesetzt Ich habe versucht, diese auf zwei separaten XP-Maschinen mit dem gleichen Ergebnis.

Der Fehler ist direkt am initialize vor meinen Exception-Handler zu laden.

Können Sie mir einige Tipps, wie ich das Debuggen kann? Hier ist eine der das Ereignisprotokoll.


Event Type: Error
Event Source:   .NET Runtime
Event Category: None
Event ID:   1026
Date:       11/17/2010
Time:       7:37:15 PM
User:       N/A
Computer:   EXIDA-100A3799C
Description:
Application: exSILentia3.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileFormatException
Stack:
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at System.Threading.ExecutionContext.runTryCode(System.Object)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at exSILentia3.Application.Main()
War es hilfreich?

Lösung

Haben Sie Visual Studio installiert auf eine der beiden Maschinen in Frage? Wenn ja, würde ich empfehlen, im Debugger ausgeführt wird, und konfigurieren Sie es so bald zu brechen, wie die Ausnahme ausgelöst wird. Aus dem Debug-Menü die Ausnahmen Dialog, erweitern Sie die Common Language Runtime Ausnahmen Element, und dann den System.IO Abschnitt erweitern Sie den System.IO.FileFormatException Artikel zu finden. Sicherstellen, dass die erste Säule (Thrown) geprüft.

Der Grund, warum ich dies vorschlagen, ist, dass der Stack-Trace haben Sie sieht aus wie der Stapel für eine rethrow gezeigt, anstatt der ursprünglichen Ausnahme. Die Ausnahme wird von der MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen Methode ausgelöst, der das Bit der WPF Nachrichtenschleife ist, die unbehandelten Ausnahmen erkennt. So dass nicht eine nützliche Sache ist im Protokoll haben angezeigt - was Sie wirklich wollen, zu wissen, wo die Ausnahme ursprünglich aus geworfen wurde, bevor WPF es gefangen. Und Sie werden in der Lage sein, das zu tun, wenn Sie die Debugger fragen so schnell zu stoppen, wie die Ausnahme ausgelöst wird.

Das sollte mehr Licht auf die Frage werfen.

Wenn das keine Option ist, können Sie versuchen, einen Handler zum Dispatcher.UnhandledException Ereignisse Befestigen oder Application.DispatcherUnhandledException Ereignisse und das Hinzufügen einig benutzerdefinierten Logging-Code der eigenen. Das könnten Sie weitere Informationen darüber, wo die Ausnahme war ursprünglich geworfen aus.

In Ermangelung detaillierter Protokollierung, die offensichtliche Sache, die mir einfällt, ist dies (obwohl es ist ein langer Schuss): Haben Sie ungewöhnliche Schriftarten auf jedem System installiert

Andere Tipps

Vielen Dank für Ihre Hilfe. Die innere Ausnahme, war ein Hauch mehr Hilfe, dass sie darauf beschränkt es auf eine Bitmap-Datei Fehler.

ich es schließlich durch Ausnehmen der Kopie des Projektes herausgefunden, bis es funktionierte. Das Problem wurde mit mir ins Gesicht. Wenn der App lädt lädt es ein Hauptfenster. Ich löschte das Symbol für dieses Fenster früh, ohne Erfolg. Es war erst später, dass ich im Bogen zurück und auch den Verweis auf das Symbol im Fenster gelöscht, dass es (Gott sei Dank) geladen, ich werde verrückt. Vielleicht ist es eine Kopie des entfernten Symbol in der Windows-Ressourcen zwischengespeichert?

Wie auch immer, habe ich unseren Icon-Editor (Axialis IconWorkshop) sicher, dass jedes mögliches Symbol Format zu machen, war vorhanden; ohne Erfolg.

ich schließlich nur das Fenster iconless links, und versuchen, das Symbol Last zu laden, wenn es fehlschlägt, ich iconless gerade laufen. Dies ist nicht perfekt, aber in den wenigen Situationen, in denen das Symbol, um ein Problem verursacht, ich will nicht, dass es für die zum Absturz bringen.

Auf einer Seite zur Kenntnis, ich hatte es auch eine ältere / niedrige Auflösung zu laden versuchen. Version des Symbols, wenn die erste ausfällt, und das funktioniert in dieser Situation.

Ich wünschte nur, der Debugger mehr Hilfe war dies genau zu bestimmen.

Sie können im Format Ihrer Symbole suchen. Ich hatte Probleme mit einer WPF-Anwendung auf Pre-Vista-Plattformen mit dem hochauflösenden 256-Symbol. Mein Design-Team versorgen Sie ein Symbol, das PNG-Format für das 256-Symbol verwendet, die älteren Plattformen nicht geladen werden können. Sobald das besondere Symbol in das Bitmap-Format war alles in Ordnung geändert wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top