在 Windows 7 机器上编写/编译的 .NET 4 程序无法在 XP 上运行
Posted
技术标签:
【中文标题】在 Windows 7 机器上编写/编译的 .NET 4 程序无法在 XP 上运行【英文标题】:.NET 4 Program written/compiled on Windows 7 machine won't run on XP 【发布时间】:2011-06-30 14:30:09 【问题描述】:我在 Windows 7 Ultimate 机器上使用 Visual Studio 2010 中的 C# .NET 4.0 编写了一个应用程序。此应用程序在 Vista 和其他 Windows 7 计算机上都可以正常运行,但每当有人运行 Windows XP 尝试运行它时,它就会崩溃。
为了重现这一点,我尝试在我的 Win XP VMWare 机器上运行它,但它在那里崩溃了。不幸的是,它没有给我任何具体的错误,只是通知我程序已经崩溃并需要关闭。
另一个用户给我发了以下信息:
Run-time error '339'
Component 'vbalSGrid6.ocx' or one of its dependencies not correctly registered: a file is missing or invalid.
Code 0xe0434352
Flags 0x00000001
当我尝试在我的 Virtual XP 机器上运行它时,我没有得到那个特别的信息,而且我还确保在那里安装了 .NET 4.0。
这可能是什么原因造成的,如果 XP 支持 .NET 4 框架,为什么应用程序不能在 XP 中运行?
程序中用到的组件:DataGridView、ComboBox、Buttons、Label、LinkLabel、NewtonSoft的JSON解析器等等。
我很困惑,完全不知道从哪里开始。想法?
更新:嗯,尝试在 XP 上运行我最近创建的另一个应用程序,它加载正常。两者之间唯一的主要区别(在我使用的组件中)是我使用 NewtonSoft 的 JSON 库,我实际上认为它是一个 .NET 3.5 组件。
更新 2:我尝试在 Wind7 机器上以“Windows XP SP3”兼容模式运行该程序,结果运行良好。当然,我不知道“兼容模式”与真正的 XP SP3 环境的模拟有多接近,但我想我还是会把信息告诉你的。
【问题讨论】:
***.com/questions/4204194/… 它们都是 32 位的吗?它可能不是操作系统,就好像您正在处理 64 与 32 位一样??? 你必须有WinXP SP3(或以上) @Mitch:他说他安装了 .NET 4,我认为如果他没有先决条件 WinXP SP3 是不可能的。 NewtonSoft 的 JSON 库不是 .NET Framework 3.5/4 的一部分,而且 .NET FW 3.5/4.0 根本没有使用 OCX 技术,因为 .NET FW 4.0 是基于 COM 的 【参考方案1】:尝试使用 Fusion Log Viewer 调试 .NET 应用程序中的启动错误。
Scott Hanselman 写了 a nice howto 以及指向更多资源的链接,如果您需要更深入的话。
【讨论】:
【参考方案2】:我们确定这是一些奇怪的 .NET 兼容性问题,还是只是安装程序/部署错误的运行问题?
这里有一位用户收到该错误消息,因为 OCX DLL 被复制到 System32 时使用了短名称。将 DLL 重命名为正确的名称并运行 RegSvr32 解决了他的问题。
您有安装程序吗?您是否正确识别了所有托管和非托管依赖项并将它们正确地编写到您的安装程序中?
http://forums.elmsoftware.com/forum_posts.asp?TID=119
【讨论】:
我实际上还没有为它编写安装程序。目前我只是将应用程序的 .zip 文件发送给我的 beta 测试人员。这对我以前的应用程序来说效果很好,目前的应用程序是唯一一个与 XP 有任何问题的应用程序。我也通过发送一个 .zip 对我所有的前一个进行了 beta 测试。 我怀疑这是你的问题。我真的建议投资于持续集成/持续部署解决方案。想想测试驱动的开发......设置驱动的开发。当您将依赖项添加到“vbalSGrid6.ocx”时,您应该考虑“如何将其部署到我的客户机器上?”。在这种情况下,您需要询问“它是可再分发的,还是我依赖于安装的其他软件?”如果你可以重新分发它,你还必须考虑'这是一个 COM 服务器。它需要注册。' 采用 SDD(设置驱动开发)方法可确保您在尝试发布产品时不会积累大量技术债务和恐慌。【参考方案3】:¡¡ 原来是应用程序图标!!
我一直注意到它在给我的错误中引用的模块是system.drawing
,我认为这很奇怪。我想也许是我使用的 PictureBox 导致了这个问题,所以我尝试禁用与此相关的所有功能,但无济于事。
我让我的商业伙伴设置了他的 XP 盒子,这样我们就可以在我的 VMWare XP 盒子之外还有另一台机器进行测试,以防万一它出现一些奇怪的问题。
在他设置好并复制应用程序后,他说“这些图标看起来像 DOS 的图标”,我有一个灵光乍现的时刻。
我使用 .PNG 作为图标是因为它们支持透明胶片等等,但 XP 本身并不支持它们。因此,当应用程序被复制到桌面时,它只使用了一个通用图标,而当应用程序运行时,它崩溃了,因为 XP 不知道如何呈现 .PNG。
【讨论】:
很高兴您发现了问题。如果没有其他人帮助您解决问题,您应该将自己的答案标记为已接受。 我会的,但我必须再等一天才能回答我自己的问题。以上是关于在 Windows 7 机器上编写/编译的 .NET 4 程序无法在 XP 上运行的主要内容,如果未能解决你的问题,请参考以下文章
rust交叉编译配置:windows上编译linux可执行程序