由.net 4.0开发的程序有时无法在重启后启动

时间:2012-05-17 02:55:00

标签: c# windows .net-4.0

我有一个由C#开发的程序,由.net 4.0构建。 该程序是一个Windows客户端,它将从条形码阅读器(通过COM端口)读取条形码,然后通过WCF将条形码发送到后端服务器。 客户在客户端操作系统中有一个脚本,它会重新启动操作系统并自动启动我的程序。操作系统是Windows XP Embedded。

现在的问题是,有时当系统重启时,我的程序无法启动,会弹出一个错误消息框询问是否将此错误报告发送给Microsoft。 最奇怪的是,如果我的同事复制程序文件夹并粘贴为“Copy of ....”与原始文件相同的文件夹中的“Copy of ...”下的exe文件可以毫无问题地运行。但原来的还是不行。

我的猜测是,当系统被迫重启时,程序可能正在编写日志和其他记录文件。并且文件将释放读/写锁。

我已将错误屏幕截图上传到flickr。请点击此处link访问。

3 个答案:

答案 0 :(得分:1)

在不知道实际异常是什么的情况下,我们只能猜测。

您需要捕获应用程序中抛出的异常。

最佳做法是将代码封装在try / catch子句中。

如果您仍然遇到应用程序崩溃,那么您可以将事件处理程序附加到AppDomain.UnhandledExceptionApplication.UnhandledException并记录正在接收的异常。

确保输出整个异常堆栈跟踪,以便您可以看到它被抛出的位置。

一旦你得到了例外,如果你无法找出原因,那么请在这里提出另一个具体细节的问题。例如:“我在Windows XP Embedded启动后调用Bar()时会抛出FooException”

答案 1 :(得分:0)

有时重启后,某些设备驱动程序或某些硬件不会自行重置。机器必须重新上电(关闭并重新打开)或需要发现一个命令,强制设备驱动程序和/或硬件重置。

答案 2 :(得分:0)

参考您发布的图片IMG_1348,错误将在您的表单构造函数中抛出。

似乎您添加的代码或InitializeComponent代码正在抛出。

由于您使用的是XPe,因此您可以选择调试此问题:

  1. 在各种构造函数周围添加消息框语句以显示初始化进度。守卫前后。

    public Form1() {   MessageBox.Show(“在InitializeComponent之前”);   的InitializeComponent();   MessageBox.Show(“在InitializeComponent之后”);

    // MessageBox.Show(“Before Other”);   //其他初始化代码   //MessageBox.Show("After Other“); }

  2. 尝试使用远程调试器。我不确定这是否适用于XPe,但如果确实如此,并且由于您的代码正在抛出构造函数,您需要添加代码以等待调试器连接。

    public Form1() {   while(!System.Diagnostics.Debugger.IsAttached){System.Threading.Thread.Sleep(0); }   的InitializeComponent();   //其他初始化代码 }