程序不能在 Win XP 上运行,但会在 Win7 上运行

Posted

技术标签:

【中文标题】程序不能在 Win XP 上运行,但会在 Win7 上运行【英文标题】:Program Does Not Run On Win XP But Will Run On Win7 【发布时间】:2013-01-15 23:14:07 【问题描述】:

所以我在 Win7 机器上使用 Visual Studio 2010 设计了一个程序。为此,该程序被称为Test.exe

当另一个用户使用 Win XP 试图打开这个程序时,它会弹出一个 Just In Time Debugger 窗口并且永远不会运行。我可以在我的 Win7 盒子和其他 Win7 盒子上打开程序,并且每次打开程序。

我不确定从哪里开始找出 Win XP 机器无法运行该程序的原因。

有什么建议吗?

编辑

这是我们在 XP 机器上运行调试器时遇到的异常错误。

System.InvalidOperationException 未处理 Message=创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:调用的目标已引发异常。 来源=WinApp 堆栈跟踪: 在 WinApp.My.MyProject.MyForms.Create_Instance_[T](T Instance) 在 WinApp.My.MyProject.MyForms.get_Form1() 在 WinApp.My.MyApplication.OnCreateMainForm() 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(字符串 [] 命令行) 在 WinApp.My.MyApplication.Main(String[] Args) 内部异常:System.Reflection.TargetInvocationException Message=Exception 已被调用的目标抛出。 源=mscorlib 堆栈跟踪: 在 System.RuntimeMethodHandle._SerializationInvoke(IRuntimeMethodInfo 方法,对象目标,SignatureStruct& declaringTypeSig,SerializationInfo 信息,StreamingContext 上下文) 在 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(对象 obj,SerializationInfo 信息,StreamingContext 上下文) 在 System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder 持有人) 在 System.Runtime.Serialization.ObjectManager.DoFixups() 在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler 处理程序,__BinaryParser serParser,布尔 fCheck,布尔 isCrossAppDomain,IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(流序列化流,HeaderHandler 处理程序,布尔 fCheck,布尔 isCrossAppDomain,IMethodCallMessage methodCallMessage) 在 System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex) 在 System.Resources.ResourceReader._LoadObjectV2(Int32 pos,ResourceTypeCode& typeCode) 在 System.Resources.ResourceReader.LoadObjectV2(Int32 pos,ResourceTypeCode& typeCode) 在 System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode) 在 System.Resources.RuntimeResourceSet.GetObject(字符串键,布尔忽略大小写,布尔 isString) 在 System.Resources.RuntimeResourceSet.GetObject(字符串键,布尔忽略大小写) 在 System.Resources.ResourceManager.GetObject(字符串名称,CultureInfo 文化,布尔值 wrapUnmanagedMemStream) 在 System.Resources.ResourceManager.GetObject(字符串名称) 在 WinApp.Form1.InitializeComponent() 在 WinApp.Form1..ctor() 内部异常:System.ComponentModel.Win32Exception Message=参数不正确 源 = System.Drawing 错误代码=-2147467259 本机错误代码=87 堆栈跟踪: 在 System.Drawing.Icon.Initialize(Int32 宽度,Int32 高度) 在 System.Drawing.Icon..ctor(SerializationInfo 信息,StreamingContext 上下文) 内部异常:

【问题讨论】:

考虑调试程序看看为什么会崩溃。 【参考方案1】:

您需要确保 Windows XP 系统安装了适当版本的 .NET Framework。

此外,有许多类型在 .NET Framework 4 中的 XP 上不起作用。例如,如果您使用 MD5Cng 类,您会看到(在文档的“平台”部分)它是仅支持 Vista+,不支持 XP。如果在 XP 上运行,在程序中使用此类会导致异常。


编辑:

从您的堆栈跟踪来看,您的表单 (WinApp.Form1) 似乎正在使用图标 (.ico),这是一种 Windows XP 不支持的格式。例如,如果您使用全彩色图标,这可能会在 XP 上引发异常。确保它是一个 256 色的图标文件,以便在 XP 上正常工作。

【讨论】:

@Muhnamana 编辑了我的答案 - 看起来您使用的是 XP 不支持的图标格式 这可能是我在表单上使用的图标吗?表格的左上角,按标题? @Muhnamana 是的。 Vista+ 支持比 XP 更好看的图标格式。如果您使用的是“现代”图标,则会导致 XP 出现异常。 向@Reed Copsey 致敬...您的图标建议一针见血...我恢复了默认图标,在 XP 机器上测试了该程序,并立即加载。 感谢您提供的帮助!

以上是关于程序不能在 Win XP 上运行,但会在 Win7 上运行的主要内容,如果未能解决你的问题,请参考以下文章

在XP系统上安装金蝶KIS专业版后,运行时提示ActiveX部件不能创建对象-KFO.Dictionary是啥原因?解决方法

SetupDiGetClassDevs 在 XP 上导致错误,在 VS2010 中内置的应用程序,在 Win7 上

有没有办法从 C# WPF 应用程序中刷新 DNS 缓存? (在 XP、Vista、Win7 上)

Win 7中的XP模式开发

为啥win7上搜索不到mklink.exe文件?

delphi7中调用了fortran编写的dll,之前用XP系统时是可以运行出结果的,但是现在换到win7了,不能用了。