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