我的应用程序在我的 PC (Windows 7) 上运行,但在另一台 (XP) 上不起作用,我不确定如何继续诊断问题
本文关键字:我的 诊断 不确定 不起作用 问题 XP 继续 何继续 Windows PC 应用程序 | 更新日期: 2023-09-27 18:33:11
问题上下文
我一直在我的PC上开发一个数据库应用程序(Windows 7,使用Visual Studio 2010 Express(,它一直在按预期工作。我刚刚将最新版本复制到运行Windows XP的PC上,它抛出了"Program has encountered an error and needs to close"
错误消息。
应用程序事件日志中的错误消息中的信息显示错误发生在initializeDatabaseConnection()
中(根据堆栈跟踪( - 这是一个相当短的方法,仅包含几行代码。
dbConnection = new MySql.Data.MySqlClient.MySqlConnection("server=myserver;
uid=myuser;
pwd=mypassword;
database=mydatabase;");
dbCommand = new MySql.Data.MySqlClient.MySqlCommand();
dbCommand.Connection = dbConnection;
尝试诊断问题的步骤
我在
initializeDatabaseConnection()
中的代码中添加了一个try-catch
以捕获任何Exception
并调用MessageBox.Show(ex.ToString()
- 发生与以前相同的错误,并且不显示消息框。它说有一个未处理的异常,尽管在堆栈跟踪中显示了此方法。我在
catch
块中添加了一个更具体的处理程序,一个用于System.IO.FileLoadException
这是事件日志条目描述的特定错误消息。与上述通用异常处理程序发生相同的行为。我在Stack Overflow上发现了一个问题,它描述了一个问题,即应用程序按预期工作,直到移动到另一台建议Visual Studio远程调试的计算机 - 但是,由于我根据文档使用Visual Studio 2010 Express,这不是我可用的功能。
关于Stack Overflow的类似问题建议,作为第一步,检查应用程序所针对的
.NET Framework
版本是否高于其他PC可以处理的版本。我把它调低了,直到3.5
,同样的错误仍然发生,我相信另一台PC已经运行了许多4.0
应用程序。同样的问题建议您检查您正在
Build Settings
构建的平台,以确认它已设置为x86
- 我已经这样做了,而且确实如此。我按照 Aybe 的建议添加了一个未处理的异常事件处理程序,这表明问题
Could not load file or assembly, MySql.Data ... etc.
......然而我不确定为什么此错误会突然发生,因为以前版本的构建按预期工作。
溶液
- 应用程序所需的
MySql.Data.dll
版本6.8.3.0
但是文件夹中的版本6.9.3.0
- 我不确定为什么现在需要6.8.3.0
,因为客户端 PC 上应用程序文件夹中的版本尚未更改,并且6.9.3.0
正在使用以前的版本。
发现这一点要归功于下面的评论,建议我实现一个UnhandledExceptionEventHandler
并链接到如何做到这一点的文档。这是我以前不知道的 CLR 的一个功能。谢谢!
虽然我仍然不确定为什么未处理异常(因为根据应用程序事件日志条目的堆栈跟踪,异常发生在所有代码都由通用异常封装的方法中 catch
块(,我实际上能够通过使用UnhandledExceptionEventHandler
捕获未处理的异常。
public static void Main()
{
AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(MyHandler);
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception) args.ExceptionObject;
// Do what you like with the exception
}