我正在使用DevStudio 2005开发一个.Net 2.0应用程序,并在Windows XP机器上运行。在我的机器上,即最新的所有自动更新,发布版本运行正常。如果我在vanilla XP SP2机器上运行该应用程序(即新安装的操作系统没有更新),它会挂起99%的CPU使用率。它正悬挂在应用程序将加载一些基于语言(翻译文本)的程序集的位置。在任何人说“获取所有更新”之前我担心这不是一个选项,因为应用程序运行的机器通常不连接到互联网 - 它们是钞票分拣机,银行IT部门真的不喜欢在他们的机器上安装新代码。
那么,有没有人知道什么可能导致.Net 2.0应用程序在一台XP PC上运行正常但在旧版XP PC上运行不正常?我猜测.Net Framework的更新导致了这些问题,但我无法确定不兼容的来源。
更新:
我已设置远程调试并在挂起时停止进程,并且调用堆栈顶部的函数为“ntll.dll!_RtlCompareMemoryUlong@12()+ 0x10 bytes”,由“RtlFreeHeapSlowly”调用(不知道为什么我想慢慢释放一些东西。
另一个更新:
构建挂起的应用程序的PC似乎安装了Dev Studio SP1和一些安全更新。我的机器没有安装SP1,如果我构建它,应用程序在目标PC上工作正常。我不认为这是一个.Net Framework问题,因为我对框架有更新,而目标PC有一个全新的框架安装。遗憾的是,我们无法在目标PC上安装Dev Studio SP1,因为它们没有安装Dev Studio。有没有办法找出哪些依赖项需要更新?
答案 0 :(得分:2)
尝试将.NET 2.0 SP1 / SP2框架与您的应用程序一起安装(即将更新的.NET框架安装程序与您的应用程序捆绑在一起。)这样,您就不会依赖客户来执行完整的Windows Update来运行您的应用程序
答案 1 :(得分:1)
如果你在99%的CPU使用率下运行时可以访问机器,你可以使用SysInternals的ProcMon来查看它在一直花费的时间。
答案 2 :(得分:1)
“挂起”是指它会永久挂起,还是只需要很长时间(每个装配15秒会加载)?如果后者和PC连接到网络但没有Internet访问权限,请尝试在Internet Explorer选项中禁用“检查证书撤销”事项。如果这样可以解决问题,您可以要求该选项保持禁用状态,或者在应用程序配置中禁用generatePublisherEvidence
设置。
如果它永久挂起,那么这个答案不适用于你:)