Tengo una aplicación de WPF que está chocando vez que lo consigo en máquinas que no tienen un entorno de desarrollo installed-- si se trata de una víctima, soy bienvenido a cerrar, pero mi búsqueda-Fu es no poder encontrar un equivalente pregunta. Parece que obtengo una XamlParseException, pero nada más útil que eso. Necesito obtener información útil.¿Cómo puedo obtener información de error WPF .NET útil de la máquina de un usuario?
El paso por el Windows 7 registros de eventos me da este registro de errores:
Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0
Problem signature:
P1: MyApp.exe
P2: 1.0.0.0
P3: 4b88323d
P4: PresentationFramework
P5: 3.0.0.0
P6: 4a174fbc
P7: 624f
P8: e1
P9: System.Windows.Markup.XamlParse
P10:
Attached files:
C:\Users\Mark\AppData\Local\Temp\WER7DC.tmp.WERInternalMetadata.xml
These files may be available here:
C:\Users\Mark\AppData\Local\Microsoft\Windows\WER\ReportArchive
\AppCrash_generatortestbed_4fa7dff09a9e893eb675f488392571ced4ac8_04ef1100
Analysis symbol:
Rechecking for solution: 0
Report Id: cd55060c-271f-11df-b6ff-001e52eefb8e
Report Status: 1
He comprobado esos directorios, y el primero no existe, mientras que el segundo contiene un archivo que acaba de wer enumera el dlls cargados.
pude instalar un entorno de desarrollo en mi máquina de prueba, pero entonces deja de ser una máquina de prueba y estoy de vuelta al punto de partida. No entiendo este error con un entorno dev instalado, por lo que no sé cómo obtener un mensaje de error detallado y útil.
EDIT: edificio fuera de comentario @Alastair Pitts abajo, así es como me han cumplimentado el manejo de excepciones:
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) {
Exception theException = e.Exception;
string theErrorPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\GeneratorTestbedError.txt";
using (System.IO.TextWriter theTextWriter = new System.IO.StreamWriter(theErrorPath, true)){
DateTime theNow = DateTime.Now;
theTextWriter.WriteLine("The error time: " + theNow.ToShortDateString() + " " + theNow.ToShortTimeString());
while (theException != null) {
theTextWriter.WriteLine("Exception: " + theException.ToString());
theException = theException.InnerException;
}
}
MessageBox.Show("The program crashed. A stack trace can be found at:\n" + theErrorPath);
e.Handled = true;
Application.Current.Shutdown();
}
Con suerte, voy a conseguir lo que necesito esta manera. ¡Gracias por la ayuda!
Si itis un XamlParseError, parece que ese error ocurriría antes de que pudiera utilizar cualquier código, por si el dibujo de la ventana de la aplicación. ¿Hay alguna manera de rastrear esta excepción antes de que se llame al código de usuario? ¿O estoy equivocado sobre XamlParseErrors? – mmr