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

本文关键字:重新启动 启动 net 开发 程序 | 更新日期: 2023-09-27 18:34:30

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

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

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

我已经将错误的屏幕截图上传到flickr。请点击这里链接访问。

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

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

您需要捕获应用程序中引发的异常。

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

如果仍然遇到应用程序崩溃,则可以将事件处理程序附加到 AppDomain.UnhandledException 或 Application.UnhandledException,并记录收到的异常。

确保输出整个异常堆栈跟踪,以便可以看到它从何处引发。

一旦你得到了异常,如果你无法找出原因,那么在这里问另一个问题,并提供具体的细节。 例如:"当我在Windows XP Embedded上启动后调用Bar((时,我收到一个FooException"

有时重新启动

后,某些设备驱动程序或某些硬件不会自行重置。 必须重新启动计算机(关闭并重新打开(,或者需要发现将强制设备驱动程序和/或硬件重置的命令。

参考您发布的图像IMG_1348,错误会在表单构造函数中引发。

似乎您添加的代码或初始化组件代码正在抛出。

由于您使用的是 XPe,因此有一些选项可以调试此问题:

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

    公共表单1(({ MessageBox.Show("Before InitializeComponent"(; 初始化组件((; MessageBox.Show("After InitializeComponent"(;

    /

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

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

    公共表单1(({ 而(!System.Diagnostics.Debugger.IsAttached({ System.Threading.Thread.Sleep(0(; } 初始化组件((; 其他初始化代码}