C# 由.NET4.0开发的程序有时在重新启动后无法启动

C# 由.NET4.0开发的程序有时在重新启动后无法启动,c#,windows,.net-4.0,C#,Windows,.net 4.0,我有一个由C#开发并由.NET4.0构建的程序。 该程序是一个windows客户端,它将从条形码阅读器(通过com端口)读取条形码,然后通过WCF将条形码发送到后端服务器。 客户在客户端操作系统中有一个脚本,可以重新启动操作系统并每天自动启动我的程序。操作系统是嵌入式Windows XP 现在的问题是,有时当系统重新启动时,我的程序无法启动,会弹出一个错误消息框,询问是否将此错误报告发送给Microsoft。 最奇怪的是,如果我的同事复制程序文件夹并将其粘贴为“copy of…”与原始文件夹中的

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

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

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


我已将错误屏幕截图上载到flickr。请单击此处访问。

有时在重新启动后,某些设备驱动程序或某些硬件将无法自行重置。必须对机器进行电源循环(关闭并重新打开),或者需要发现一个命令,该命令将强制设备驱动程序和/或硬件重置。

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

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

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

最佳实践是将代码封装在try/catch子句中

如果应用程序仍在崩溃,则可以将事件处理程序附加到或,并记录接收到的异常

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


一旦你有了异常,如果你不能找出原因,那么在这里问另一个问题,并说明具体细节。例如:“当我在Windows XP Embedded上启动后调用Bar()时,会引发一个FooException”

如果不知道实际的异常是什么,我们只能猜测

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

最佳实践是将代码封装在try/catch子句中

如果应用程序仍在崩溃,则可以将事件处理程序附加到或,并记录接收到的异常

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


一旦你有了异常,如果你不能找出原因,那么在这里问另一个问题,并说明具体细节。例如:“我在Windows XP Embedded上启动后调用Bar()时遇到一个FooException被抛出”

参考您发布的图像IMG_1348,错误被抛出到表单构造函数中

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

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

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

    公共表格1() { MessageBox.Show(“在初始化组件之前”); 初始化组件(); MessageBox.Show(“在初始化组件之后”)

    //MessageBox.Show(“在其他之前”); //其他初始化代码 //MessageBox.Show(“在其他之后”); }

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

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


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

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

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

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

    公共表格1() { MessageBox.Show(“在初始化组件之前”); 初始化组件(); MessageBox.Show(“在初始化组件之后”)

    //MessageBox.Show(“在其他之前”); //其他初始化代码 //MessageBox.Show(“在其他之后”); }

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

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


  • 重新启动后的权限问题?听起来好像WCF中有管道冲突?您是否检查了任务管理器以验证流程是否在某些状态下未启动?的副本可能会以不同的名称运行,因此可能会正常工作。这是我最好的猜测,没有看到codeHi Eric J。我们已经检查过了,我认为这不是许可问题。因为大多数时候它运行正常。并已检查文件夹访问权限,登录帐户具有完全访问权限。嗨,贾斯汀·皮奥尼,非常感谢你的建议。但是相同名称的运行副本我已将错误屏幕截图上传到flickr。请单击此处访问。感谢您的帮助。重新启动后权限问题?听起来好像WCF中有管道冲突?您是否检查了任务管理器以验证流程是否在某些状态下未启动?的副本可能会以不同的名称运行,并且可能会因为