我有一个由C#开发的程序,由.net 4.0构build。 这个程序是一个Windows客户端,它将从条形码读取器(通过COM端口)读取条形码,然后通过WCF将条形码发送到后端服务器。 客户在客户端操作系统中有一个脚本,可以重新启动操作系统,并每天自动启动我的程序。 操作系统是Windows XP Embedded。
现在的问题是,有时当系统重新启动,我的程序无法启动,并会popup一个错误消息框,询问是否将此错误报告发送给Microsoft。 最奇怪的是,如果我的同事复制程序文件夹并粘贴为“复制…”在同一个文件夹与原来的“复制…”下的exe可以运行没有任何问题。 但原来的还是不行。
我猜测可能是程序在系统被迫重启的时候正在写日志和其他logging文件。 并且文件得到未发布的读/写锁。
我已经将错误屏幕截图上传到flickr。 请点击这里链接访问。
不知道实际例外是什么,我们只能猜测。
您将需要捕获正在您的应用程序中抛出的异常。
最好的做法是将你的代码封装在try / catch子句中。
如果您仍然遇到应用程序崩溃,则可以将事件处理程序附加到AppDomain.UnhandledException或Application.UnhandledException,并记录正在接收的异常。
确保输出整个异常堆栈跟踪,以便您可以看到从哪里抛出。
一旦你有例外,如果你不能找出原因,那么在这里提出另一个问题,具体细节。 例如:“我在调用Windows XP Embedded启动后调用Bar()时遇到FooException异常”
有时在重新启动后,某些设备驱动程序或某些硬件将不会自行重置。 必须重新启动机器(关闭并重新打开),或者需要发现一条将强制设备驱动程序和/或硬件重置的命令。
参考你张贴的图像IMG_1348,错误是在你的表单构造函数中抛出的。
看起来像你添加的代码或InitializeComponent代码抛出。
由于您正在使用XPe,因此您有一些选项可以调试此问题:
围绕各种构造函数添加消息框语句以显示初始化进度。 守卫前后。
公共Form1(){MessageBox.Show(“之前InitializeComponent”); 的InitializeComponent(); MessageBox.Show(“InitializeComponent”之后);
//MessageBox.Show("Before Other“); //其他初始化代码//MessageBox.Show("After Other“); }
尝试使用远程调试器。 我不确定这是否适用于XPe,但如果是这样,并且由于代码正在引发构造函数,则需要添加代码,直到调试器连接。
公共Form1(){while(!System.Diagnostics.Debugger.IsAttached){System.Threading.Thread.Sleep(0); } InitializeComponent(); //其他初始化代码}