【发布时间】:2011-08-01 19:49:16
【问题描述】:
我有一个非常大的 C# .NET4 WinForms 应用程序,已经投入生产超过 18 个月。我们终于在 Windows 7 上对其进行了测试(这个大公司还没有迁移)。该应用程序可以正常启动并运行,直到我们启动一个非常大的进程(从数据库中多次获取,并且绑定了许多表单和控件)。
当我们第一次在 Win7 上启动该进程时,系统崩溃了,Win7 在我们的*.vshost.exe 周围创建了一个应用兼容性垫片。当我查看注册表时
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
它显示vshost.exe,其值为DISABLEUSERCALLBACKEXCEPTION。
我搜索了一下,发现的很少。
有谁知道什么类型的代码会导致这种情况?我想修复代码以防止 shim。
【问题讨论】:
-
是崩溃造成的。不要修复垫片,修复崩溃。
-
这就是我的问题,什么类型的代码会导致我的应用程序崩溃(在 XP 中没有崩溃)到 Win7 需要创建 shim 的位置?
-
错误代码,当然。或者任何无视 UAC 限制的东西。如果您从未在 Vista 或 Win7 上运行过它,那很有可能。给每个人买一台新的开发机器,时间差不多。如果他们仍然停留在 2005 年或更低,则进行 VS 更新。 VS2008 及更高版本包含在程序中的清单也应避免使用 shim。
-
在网上搜索,当您的应用程序在 wndproc 内崩溃时,似乎添加了此 shim。
-
拉里说得对。防止这种情况发生的最简单方法是通过清单将自己标记为与 Win7 兼容(请阅读下面的答案以了解血腥细节)
标签: c# winforms windows-7 registry