Программа.NET 4, написанная / скомпилированная на компьютере с Windows 7, не будет работать на XP
У меня есть приложение, которое я написал с использованием C# .NET 4.0 в Visual Studio 2010 на моем компьютере с Windows 7 Ultimate. Это приложение отлично работает как на Windows Vista, так и на других компьютерах с Windows 7, но всякий раз, когда кто-то работает под управлением Windows XP, пытается его запустить, происходит сбой.
Чтобы воспроизвести это, я попытался запустить его на своей машине с Win XP VMWare, и он там вылетает. К сожалению, это не дает мне никакой конкретной ошибки, просто сообщает мне, что программа потерпела крах и должна закрыться.
Еще один пользователь прислал мне следующее:
Run-time error '339'
Component 'vbalSGrid6.ocx' or one of its dependencies not correctly registered: a file is missing or invalid.
Code 0xe0434352
Flags 0x00000001
Я не получаю этого конкретного кусочка, когда пытаюсь запустить его на своей машине с Virtual XP, и я также удостоверился, что установил там.NET 4.0.
Что может быть причиной этого, и почему приложение не будет работать в XP, если для XP поддерживается платформа.NET 4?
Компоненты, используемые в программе: DataGridView, ComboBox, Buttons, Labels, LinkLabel, JSON-анализатор NewtonSoft, и на этом все.
Я сбит с толку и совершенно не знаю, с чего начать. Идеи?
ОБНОВЛЕНИЕ: Хм, попытался запустить мое другое недавно созданное приложение на XP, и оно загрузилось нормально. Единственное существенное различие (в любом случае в компонентах, которые я использовал) между ними заключается в том, что я использую библиотеку JSON от NewtonSoft, которую я на самом деле считаю компонентом.NET 3.5.
ОБНОВЛЕНИЕ 2: Просто ради удовольствия я попытался запустить программу на своем компьютере с Wind7 в режиме совместимости с Windows XP SP3, и она работала нормально. Конечно, я понятия не имею, насколько близко "режим совместимости" эмулирует настоящую среду XP SP3, но я решил, что все равно предоставлю вам информацию.
3 ответа
¡¡ЭТО БЫЛО ЗНАЧОК ПРИМЕНЕНИЯ!!
Я продолжал замечать, что модуль, на который он ссылался в сообщенной мне ошибке, был system.drawing
который я думал странным Я подумал, что, возможно, проблема была в том, что я использовал PictureBox, поэтому я попытался отключить все, что с этим связано, но безрезультатно.
Мой партнер по бизнесу настроил его XP, чтобы у нас была другая машина для тестирования, кроме моего VMWare XP, на случай, если с ним возникнут какие-то странные проблемы.
После того, как он настроил его и скопировал приложение, он сказал: "Иконки выглядят как DOS", и у меня был момент эврики.
Я использовал.PNG в качестве значков, потому что они поддерживают прозрачность и еще много чего, но XP изначально не поддерживает их. Поэтому, когда приложение было скопировано на рабочий стол, оно просто использовало для него общий значок, а при запуске приложения оно зависало, потому что XP не знает, как отобразить.PNG.
Попробуйте использовать Fusion Log Viewer для устранения ошибок запуска в приложениях.NET.
Скотт Хансельман написал хорошее руководство вместе со ссылками на дополнительные ресурсы, если вам нужно углубиться.
Мы уверены, что это какая-то странная проблема с совместимостью.NET или просто проблема плохой программы установки / развертывания?
Вот один пользователь, у которого есть это сообщение об ошибке, потому что DLL OCX была скопирована в System32 с коротким именем. Переименование DLL на правильное имя и запуск RegSvr32 решили его проблему.
У вас есть установщик? Правильно ли вы определили все ваши управляемые и неуправляемые зависимости и правильно создали их в своем установщике?