Почему мое приложение падает на Win XP, если я не установил среду выполнения VS2005? - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь выяснить, почему мое приложение, написанное в VC 2008, зависало на голой Windows XP с c0000005.Он прекрасно работает на любых Windows Vista и 7. На XP он будет падать без дополнительной информации.Ниже приведены подробности и результат нескольких дней моих головных болей, устраняющих одну причину за другой.Вот подробности:

  • У меня Win7 ultimate с XP Mode с iexplore 6 и, по-видимому, без патчей.

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

  • Мое приложение скомпилировано во время выполнения VC2008 (с использованием / MT, в отличие от / MD).переключатель компилятора)

  • Я использую встроенный Firebird, которому требуется VC2005 (отредактировано, я писал VC2008 раньше) libs для себя в любом случае,поэтому я поместил их в рабочий каталог моего приложения

  • , когда я устанавливаю VC ++ 2008 на этот компьютер с режимом XP, он больше не падает, поэтому отладка таким способом невозможна

  • Я сузил возникновение этой ошибки до времени выполнения VC2005 - сразу после его установки мое приложение перестает падать.Но я не знаю, что может быть с его компонентами.При запуске версии релиза в среде IDE VC2008 ничего не показывает загружаемые библиотеки vc2005 (странно, если я так говорю).

В зависимостях компоновщика моего приложения перечислены эти (я добавил только первыйдва, остальное было любезно предоставлено VisualStudio): jpeg.lib, gdiplus.lib, kernel32.lib, user32.lib, gdi32.lib, winspool.lib, comdlg32.lib, advapi32.lib, shell32.lib, ole32.lib, oleaut32.lib, uuid.lib, odbc32.lib, odbccp32.lib, comctl32.lib,% (AdditionalDependencies)

Я также использую интерфейс IBPP firebird, который загружает их динамически, поэтому они присутствуют в моемкаталог приложения (им нужны msvc? 80.dll): fbembed.dll, ib_util.dll, icudt30.dll, icuin30.dll, icuuc30.dll, msvcp80.dll, msvcr80.dll

Посоветуйте, пожалуйста, зачем vc2005Среда выполнения будет средством для моего приложения, чтобы оно не зависало на голой Win XP.Или как я могу отладить это без установки vc 2008 на целевой машине.Я начинаю обвинять компоненты Windows XP.В конечном итоге я хочу, чтобы мое приложение не требовало никаких дополнительных пакетов, таких как VC2008 или 2005, особенно когда ни один компонент моего приложения не требует последнего.

1 Ответ

2 голосов
/ 07 ноября 2011

Я также использую интерфейс IBPP firebird ... msvcp80.dll, msvcr80.dll

Ответ на ваш вопрос: эти библиотеки DLL являются библиотеками поддержки времени исполнения VS2005.Они не могут быть сохранены в вашем каталоге exe, они должны быть зарегистрированы в параллельном кэше.Обычно это не вызывает AV, но это невозможно, если код не проверяет возвращаемое значение LoadLibrary ().Вы можете скачать установщик для них от Microsoft .В противном случае он не имеет ничего общего с Windows XP, вы просто попытались запустить эту программу на компьютерах, на которых уже установлены библиотеки DLL.Например, это очень часто встречается на компьютере разработчика.

Если вы не хотите зависеть от них, вам придется перестраивать те библиотеки DLL, которые в этом нуждаются.Это хорошая идея, зависимость от нескольких версий CRT довольно вредна для здоровья.

Если вам интересно, почему вы сталкиваетесь с этим: это была попытка Microsoft поместить DLL Hell вколени разработчика вместо пользователя.С тех пор они отозвали это, VS2010 снова делает это проблемой пользователя.Я думаю, это была довольно большая вечеринка в Бангалоре.

...