2012-01-30 8 views
6

Tuve un par de problemas desagradables con las aplicaciones WPF que bloquean ciertas máquinas cliente pero que funcionan en todos lados: la pesadilla de todo desarrollador.La ventana de WPF falla al iniciarse, o se inicia pero se cuelga y no genera contenido

Estoy publicando los problemas/soluciones aquí para ayudar a preservar la cordura de otros desarrolladores. Estos no fueron fáciles de solucionar.

Ambos problemas son clásicos: "funciona en mi máquina pero no en la suya".

  1. WPF la aplicación se bloquea al iniciarse. Sin errores, ni idea de por qué.
  2. La aplicación WPF se inicia, el borde de la ventana muestra, pero el contenido no se pinta. Simplemente cuelga (reportado como una "ventana transparente") Al hacer clic para cerrar, se desencadena un informe de falla (la máquina fue Windows XP).

Respuesta

17

1) WPF se bloquea al iniciar la aplicación. Sin errores, ni idea de por qué.

El paso clave de solución de problemas para encontrar realmente el error en primer lugar es agregar un manejo de error adicional a app.xaml.

En su cabecera App.xaml, añadir:

<Application DispatcherUnhandledException="App_DispatcherUnhandledException" /> 

y en sus App.xaml.cs, añadir algo como:

void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs args) 
    { 
     log.Fatal("An unexpected application exception occurred", args.Exception); 

     MessageBox.Show("An unexpected exception has occurred. Shutting down the application. Please check the log file for more details."); 

     // Prevent default unhandled exception processing 
     args.Handled = true; 

     Environment.Exit(0); 
    } 

Después de la adición de esta depuración adicional, vi el error :

System.TypeInitializationException: el inicializador de tipo para 'System.Windows.Media.FontFamily' lanzó una excepción. ---> System.ArgumentException: caracteres ilegales en la ruta.

más investigación, buscando en Google, y el café, dirigido a la solución de que la máquina cliente tenía un terminador '◻' personaje en una entrada de la fuente en el registro bajo

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fonts

Eliminar este personaje rebelde resolvió el problema.

No idea how this got into the registry

Ver el blog de ahorro de carrera "How to Crash every WPF application".

2) La aplicación WPF se inicia, el borde de la ventana muestra, pero los contenidos no se pintan. Simplemente se cuelga (se informa como una "ventana transparente")

Este fue otro problema relacionado con la fuente. Inicialmente reduje esto a fontSize = "16" en Window.xaml que no funcionaba en una (y solo una) máquina en un sitio de cliente, como si WPF se negara a renderizar sus fuentes en el tamaño 16 (?). Eliminé el código especificando el tamaño de fuente y funcionó ... pero resulta que solo funcionó para mi perfil de inicio de sesión. Continuó fallando para el perfil de inicio de sesión de un colega en la misma máquina máquina. Podría, literalmente, iniciar sesión como yo mismo, ejecutarlo con éxito, cerrar sesión, iniciar sesión como él mismo, ejecutarlo, y fallaría con la "ventana transparente que cuelga". Misma máquina, mismos permisos.

Como último recurso, me conecté como él y me di cuenta de que tenía un tema personalizado con fuente ampliada. Cambié el tema de Windows al tema clásico ... y esto solucionó el problema (?!?). Este problema parece estar relacionado con las fuentes, pero no tengo una causa raíz absoluta identificada. Cambiar el tema a un tema estándar es una solución temporal.

Cuestiones relacionadas