Приложение C # падает на XP - PullRequest
       40

Приложение C # падает на XP

0 голосов
/ 24 августа 2011

Последние 3 месяца я разрабатывал приложение C # для Windows 7 в VS2010.Теперь он почти готов, и я узнал, что он не может работать на XP.Он мгновенно падает и показывает сообщение «Программа обнаружила проблему и должна быть закрыта ...».Стандартная ошибка окна «отправить / не отправить» ничего конкретного не говорит о проблеме.

Я могу разместить здесь код, но буквально тысячи строк, и я не знаю, какая часть важна, а какая нет.Может кто-нибудь сказать мне «обычных подозреваемых», которые вызывают эту проблему?

Спасибо (кстати, у меня есть Framework 4 на обоих моих компьютерах. Мои другие приложения .NET работают нормально.)

[РЕШЕНИЕ] Проблема была в LineShape, который я создал в VS10 как часть GUI.Эти строки вызывают сбой, я не знаю почему.Как оказалось, это была не проблема ОС, аналогичная проблема была на W7 и Vista.В основном каждый ПК не был VS установлен :)

Ответы [ 3 ]

0 голосов
/ 24 августа 2011

В 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);
0 голосов
/ 24 августа 2011

Держу пари, что вы используете сборки P / Invoke или Mixed mode (с использованием небезопасного или собственного кода).

Может быть различие в платформе (подумайте о разнице между 32/64 битностью, но такжепропущенные / измененные вызовы API).

Чтобы выяснить наиболее вероятные места в вашем коде, я рекомендую немного необычную рекомендацию: запустить его через анализатор MoMa (ссылка ).

Анализатор MoMa был разработан для выявления проблем с переносимостью, которые могут возникнуть при запуске приложений, разработанных для / на MS .NET Framework на кроссплатформенной платформе Mono Framework (доступной в Unix, MAC, Windows и даже iOS и Android).платформы).

Это даст вам хороший отчет о вещах, которые могут вызвать проблемы.Вы, конечно, можете пренебречь элементами, о которых сообщается, что они «не реализованы на моно», потому что это не проблема.Тем не менее, он найдет все смешное использование P / Invoke и такие вещи, которые могут указать вам на проблему.

0 голосов
/ 24 августа 2011

зарегистрируйтесь для события 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;
    }
...