gpt4 book ai didi

c# - 如何从用户的机器上获取有用的 WPF .NET 错误信息?

转载 作者:可可西里 更新时间:2023-11-01 07:45:32 25 4
gpt4 key购买 nike

我有一个 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

我已经检查了那些目录,第一个不存在,而第二个包含一个只列出加载的 dll 的 wer 文件。

我可以在我的测试机器上安装一个开发环境,但它不能成为测试机器,我又回到了原点。我在安装开发环境时没有收到此错误,所以我不知道如何获得详细、有用的错误消息。

编辑:根据下面@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();
}

希望我能通过这种方式得到我需要的东西。感谢您的帮助!

最佳答案

我将使用的过程是处理 UnhandledException event在应用程序域中。

完成后,您有多种选择。将异常记录到文件中,将其序列化以供以后检查,显示带有异常消息的对话框。

编辑:XamlParseException 在创建主窗口时发生。这意味着正在调用该窗口的构造函数。如果您在该构造函数中执行任何逻辑,则任何由此产生的异常都将引发 XamlParseException。据我了解,UnhandledException 处理程序仍会捕获此异常。

要在 WPF 中连接 UnhandledException 事件,请在您的 app.xaml 中添加事件连接

<Application 
x:Class="DispatcherUnhandledExceptionSample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
DispatcherUnhandledException="App_DispatcherUnhandledException" />

然后在您的 app.cs 中添加一个方法

public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// Process unhandled exception do stuff below

// Prevent default unhandled exception processing
e.Handled = true;
}
}

MSDN

关于c# - 如何从用户的机器上获取有用的 WPF .NET 错误信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com