我使用Visual Studio 2010在C#中编写了一个小型WinForms应用程序。
它在我的环境中运行良好,但我注意到我需要在安装了.NET Framework 2.0的Windows Server 2003 SP2服务器上的客户站点上运行该应用程序。
然后,我使用.NET Framework 2.0作为目标框架构建了应用程序。应用程序再次在我的计算机上运行得非常好。
在客户服务器上,我注意到一种奇怪的行为。启动应用程序后,黑色窗口打开半秒钟,然后关闭。我没有收到错误消息。
我发现应用程序甚至没有进入主函数。
如何进一步调试和/或解决?
答案 0 :(得分:2)
您需要做的是订阅两个事件:UnhandledException和AssemblyResolve。第一个被触发......一个未处理的异常(当然)。当遇到无法解析的程序集引用时,第二次触发。其中一个或两个将帮助您将错误捕获到目标计算机上。
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string message = string.Format("Program encountered an unhandled Exception: {0}", e.ExceptionObject);
MessageBox.Show(message);
}
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string message = string.Format("Assembly cannot be located!: {0}", args.Name);
MessageBox.Show(message);
return null;
}
您应该在代码的最开头注册这两个事件处理程序,如图所示。
希望这有帮助!
答案 1 :(得分:0)
应该有一个应用程序启动事件。我现在已经多年通过了Windows编程,但我记得Application有一些启动事件和结束事件以及类似的东西。您可以搜索这些事件,为它们创建处理程序,并在这些处理程序中,尝试写入文本文件以跟踪您的应用程序。此外,如果你可以发布任何代码,它将是有用的。