Приложение WinForms показывает черное окно + исчезает при запуске - PullRequest
1 голос
/ 04 июля 2011

Я написал небольшое приложение WinForms на C # с Visual Studio 2010.

В моей среде это работало достаточно хорошо, но я заметил, что мне нужно запустить приложение на сайте клиента на сервере Windows Server 2003 SP2 с установленным .NET Framework 2.0.

Затем я создал приложение с .NET Framework 2.0 в качестве целевой платформы. Снова приложение отлично работало на моем компьютере.

На клиентском сервере я заметил странное поведение. После запуска приложения черное окно открывается на полсекунды и затем закрывается. Я не получаю сообщение об ошибке.

Я обнаружил, что приложение даже не входит в основную функцию.

Как это можно отладить дальше и / или решить?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Вам необходимо подписаться на два события: UnhandledException и AssemblyResolve. Первый срабатывает на ... необработанное исключение (конечно). Второе срабатывает, когда .NET встречает ссылку на сборку, которую он не может разрешить. Один или оба из них помогут вам перехватить ошибку на целевом компьютере.

 [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;
    }

Вы должны зарегистрировать эти два обработчика событий в самом начале в своем коде, как показано.

Надеюсь, это поможет!

0 голосов
/ 04 июля 2011

Должно быть событие запуска приложения.Сейчас я прошёл годы программирования Windows, но я помню, что в Application было какое-то начальное и конечное события и тому подобное.Вы можете искать эти события, создавать для них обработчики, и в этих обработчиках пытаться записать в текстовый файл, чтобы отследить ваше приложение.Также, если вы можете опубликовать любой код, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...