在Windows 7计算机上编写/编译的.NET 4程序将无法在XP上运行

我有一个应用程序,我在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框架,为什么app不会在XP中运行?

程序中使用的组件:DataGridView,ComboBox,Buttons,Labels,LinkLabel,NewtonSoft的JSON解析器,以及它的相关内容。

我很困惑,完全不知道从哪里开始。 想法?

更新 :嗯,尝试在XP上运行我最近创建的其他应用程序,它加载得很好。 两者之间唯一的主要区别(在我使用的组件中)是我使用NewtonSoft的JSON库,我实际上认为它是.NET 3.5组件。

更新2 :只是为了踢,我试图在我的Wind7机器上以“Windows XP SP3”兼容模式运行程序,它运行正常。 当然,我不知道“兼容模式”如何模仿真正的XP SP3环境,但我想我还是会给你信息。

它是应用程序图标!

我一直注意到它给我的错误中引用的模块是system.drawing ,我认为这很奇怪。 我想也许我正在使用的PictureBox导致了这个问题,所以我尝试禁用一切与此有关,但无济于事。

我让我的业务合作伙伴设置了他的XP盒子,这样我们就可以使用另一台机器进行测试,除了我的VMWare XP盒子之外,万一它有一些奇怪的问题。

在他设置好并且应用程序被复制后,他说“图标看起来像DOS那些”,我有一个尤里卡时刻。

我使用.PNG作为图标,因为它们支持透明度等等,但XP本身并不支持它们。 因此,当应用程序被复制到桌面时,它只是使用了通用图标,当应用程序运行时,它崩溃了,因为XP不知道如何呈现.PNG。

尝试使用Fusion Log Viewer调试.NET应用程序中的启动错误。

如果你需要更深入的话,Scott Hanselman写了一篇很好的howto以及更多资源的链接。

我们是否确定这是一些奇怪的.NET兼容性问题,或者仅仅是运行不良的安装程序/部署问题?

这是一个有错误消息的用户,因为OCX DLL已使用短名称复制到System32。 将DLL重命名为正确的名称并运行RegSvr32解决了他的问题。

你有安装人员吗? 您是否正确识别了所有托管和非托管依赖项并将其正确编写到安装程序中?

http://forums.elmsoftware.com/forum_posts.asp?TID=119