WinForms应用程序显示启动时黑色窗口+消失

时间:2011-07-04 18:39:21

标签: .net winforms

我使用Visual Studio 2010在C#中编写了一个小型WinForms应用程序。

它在我的环境中运行良好,但我注意到我需要在安装了.NET Framework 2.0的Windows Server 2003 SP2服务器上的客户站点上运行该应用程序。

然后,我使用.NET Framework 2.0作为目标框架构建了应用程序。应用程序再次在我的计算机上运行得非常好。

在客户服务器上,我注意到一种奇怪的行为。启动应用程序后,黑色窗口打开半秒钟,然后关闭。我没有收到错误消息。

我发现应用程序甚至没有进入主函数。

如何进一步调试和/或解决?

2 个答案:

答案 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有一些启动事件和结束事件以及类似的东西。您可以搜索这些事件,为它们创建处理程序,并在这些处理程序中,尝试写入文本文件以跟踪您的应用程序。此外,如果你可以发布任何代码,它将是有用的。