Как получить полезную информацию об ошибках WPF .NET с компьютера пользователя?

У меня есть приложение WPF, которое выходит из строя, как только я получаю его на компьютерах, на которых не установлена ​​среда разработки - если это обман, я могу закрыть его, но я не могу найти эквивалентный вопрос. Похоже, что я получаю исключение XamlParseException, но ничего более полезного, чем это. Мне нужно получить полезную информацию.

Просмотр журналов событий Windows 7 дает мне этот журнал ошибок:

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

Я проверил эти каталоги, и первый не существует, а второй содержит файл wer, который просто перечисляет загруженные библиотеки DLL.

Я мог бы установить среду разработки на моей тестовой машине, но тогда она перестала быть тестовой, и я вернулся к исходной точке. Я не получаю эту ошибку с установленной средой разработки, поэтому затрудняюсь получить подробное и полезное сообщение об ошибке.

РЕДАКТИРОВАТЬ: на основе комментария @Alastair Pitts ниже, вот как я заполнил обработку исключений:

    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();
    }

Надеюсь, я получу то, что мне нужно, таким образом. Спасибо за помощь!

Ответы на вопрос(4)

Ваш ответ на вопрос