C#应用程序在XP上崩溃
最近3个月我在VS2010中开发Windows 7上的C#应用程序。现在它几乎完成了,我发现它无法在XP上运行。它立即崩溃,并显示消息“程序遇到问题,需要关闭......”。标准窗口“发送/不发送”错误说没有具体的问题。C#应用程序在XP上崩溃
我可以在这里发布代码,但有几千行,我不知道哪个部分是重要的,哪些不是。有人可以告诉我“通常的嫌疑犯”会导致这个问题吗?
感谢 (顺便说一句我有Framework 4的两个我的电脑。我的其他.NET应用程序工作正常。)
[解决方案] 问题是线形我在VS10创建为GUI的一部分。这些行导致崩溃我不知道为什么。事实证明,这不是操作系统问题,类似的问题在W7和Vista上。基本上每台电脑都没有VS安装:)
注册为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;
}
要试试感谢 – 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的所有有趣用法以及可能会指出您遇到的问题。
事件日志应该有一些简洁的条目,如果您不想在此处显示,也可以使用pastebin - http://pastebin.com/。 – kd7
我建议你检查配置管理器,并尝试编译x86-32,而不是x64或“任何CPU” –
@Safiron:你记录了应用程序中发生的异常,还有未处理的异常? – Tigran