WPF应用程序错误和.Net框架修复

Lee*_*oth 11 .net wpf prism .net-framework-version

背景:我在Windows XP和Windows PosReady 2009 PC上运行了基于.Net 3.5 WPF"Prism"的应用程序.该应用程序运行在每晚关闭的PC上(通过C#调用"shutdown.exe")并在早上启动(通过局域网唤醒).该应用程序是基于触摸的(使用ELO触摸屏),没有连接鼠标或键盘,用户无法访问Windows.

问题:我们偶尔会发现两件事之一发生的问题; 要么应用程序似乎没有正确加载,我们看到一个空白的白色表单显示,或它停止响应触摸.通过查看我们的(log4net)日志,我们可以看到我们仍在处理触摸事件并在两种情况下都将其记录下来.通常这在切换视图时会出现,我们也会在日志中看到Prism RegionManager正在删除并适当添加视图.

故障排除:应用程序使用Clonezilla应用的图像在约100台PC上运行,这种情况只是偶尔发生.由于它并未在所有PC上发生,并且在事件查看器中没有记录任何异常或任何指示问题,因此我们采用了更多的PC和操作系统级修复程序.具体来说,我们尝试重新启动应用程序和PC偶尔短期成功 - 这意味着有时应用程序将在重新启动后正常运行,但最多只能持续几个小时.我们也假设应用程序已经被破坏,我们已经删除并重新安装它,但没有成功.

似乎解决该问题的唯一方法是使用提供的.Net 3.5 SP1安装程序包修复.Net框架.

结论:由于这似乎解决了这个问题,当没有别的事情发生时,我们似乎在某种程度上破坏了GAC的框架DLL - 无论是通过代码还是PC上的启动/关闭程序.

问题:这导致了许多问题:

  • 关于如何进一步确定问题根源的任何想法?
  • 关于我们如何防止这个问题的任何想法?
  • 关于潜在问题可能是什么的任何想法?

谢谢你的帮助.

Lee*_*oth 2

我们最终找到了一台出现此行为的生产机器,并通过一系列故障排除步骤(包括向 Microsoft 发送转储文件)找到了问题所在。

WPF 字体缓存 Windows 服务偶尔会进入损坏状态,导致简单的缓存请求无限期阻塞。此挂起导致了我们的 WPF 应用程序中出现上述所有行为。

简单的解决方案:停止并禁用该服务。禁用该服务并重新启动电脑后,该服务将不再使用,我们没有看到任何这些问题。理论上,这会导致应用程序加载时间更长,但我们看到的负面影响为零。

请注意,该服务有两个版本:3.0.0.0 和 4.0.0.0。如果您的应用程序面向 .Net 3.0 或 3.5,则需要禁用 3 服务,如果面向 4.0+,则需要禁用 4 服务。

感谢大家的意见和建议。