C#应用程序在XP上崩溃

问题描述:

最近3个月我在VS2010中开发Windows 7上的C#应用​​程序。现在它几乎完成了,我发现它无法在XP上运行。它立即崩溃,并显示消息“程序遇到问题,需要关闭......”。标准窗口“发送/不发送”错误说没有具体的问题。C#应用程序在XP上崩溃

我可以在这里发布代码,但有几千行,我不知道哪个部分是重要的,哪些不是。有人可以告诉我“通常的嫌疑犯”会导致这个问题吗?

感谢 (顺便说一句我有Framework 4的两个我的电脑。我的其他.NET应用程序工作正常。)

[解决方案] 问题是线形我在VS10创建为GUI的一部分。这些行导致崩溃我不知道为什么。事实证明,这不是操作系统问题,类似的问题在W7和Vista上。基本上每台电脑都没有VS安装:)

+4

事件日志应该有一些简洁的条目,如果您不想在此处显示,也可以使用pastebin - http://pastebin.com/。 – kd7

+0

我建议你检查配置管理器,并尝试编译x86-32,而不是x64或“任何CPU” –

+0

@Safiron:你记录了应用程序中发生的异常,还有未处理的异常? – Tigran

注册为Appdomain.UnhandledException事件在您的应用程序中某处的静态虚拟初始化程序属性中,在将其重新导入到环境中之前,在您的处理程序中处理/输出事件。如果这不能帮助它是另一个静态成员,在你的处理程序订阅之前被调用的地方,或者“其他地方是错误的”。

static bool dummy = RegisterUnhandledExceptionHandler(); 

    private static bool RegisterUnhandledExceptionHandler() 
    { 
     AppDomain.CurrentDomain.UnhandledException += (sender, e) => 
     { 
      Exception ex = (e.ExceptionObject as Exception); 
      // quick dump to file because environment will exit soon 
      File.WriteAllText("unhandled.txt", ex.StackTrace); 
      throw ex; 
     } 
     return true; 
    } 
+0

要试试感谢 – Safiron

在你的应用程序的main,处理应用领域异常和应用程序线程异常的代码,然后诊断它想:

AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException; 

//in windows forms you need also to add these two lines 
Application.ThreadException += OnApplication_ThreadException; 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

我打赌你正在使用的P/Invoke或混合模式组件(使用不安全或本地代码)。

可能存在平台差异(考虑32/64位的差异,但也缺少/更改的API调用)。

要找到代码中最有可能的点,我有一个非正统的建议:通过MoMa分析仪link)运行它。

MoMa分析器旨在检测在跨平台Mono Framework上运行为/在MS .NET Framework上开发的应用程序时可能出现的可移植性问题(可在Unix,MAC,Windows甚至iOS和Android平台上使用) 。

它会给你一个很好的报告可能会导致问题的事情。当然,您可以忽略报告为“未在单声道上实现”的项目 - 因为这不是问题。但是,它会发现P/Invoke的所有有趣用法以及可能会指出您遇到的问题。