Точка входа процедуры _except_handler4_common не может быть расположена в библиотеке динамической ссылки msvcrt.dll

Я использую «Microsoft Visual Studio» для работы с «приложением MFC».

Я использую «Installshield» для создания установочного файла для этого приложения.

Я получаю файл setup.exe.

Если я запустил эту установку на 32-разрядной машине Windows XP, установка завершится правильно.

Тем не менее, когда я пытаюсь запустить установленную программу, я получаю сообщение:

"The procedure entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll."

В режиме отладки я не могу найти момент возникновения ошибки, потому что, независимо от точки останова, которую я вставлял в код, сообщение появляется до достижения точки останова, я думаю, что в самом начале выполнения программы ...

Примечание. Он работает для Vista 32 бит и семи бит 64 бит.

Похоже, у многих людей есть такая же проблема, но я не мог найти решение для себя.

Вы можете помочь? Спасибо.

4
15 лет назад Msvcrt.dll использовался проектами VC ++. Вы не можете использовать их больше, если вы не запускаете их на виртуальной машине. Вам нужно будет перестроить эти проекты.
добавлено автор Hans Passant, источник
Лучше всего его обслуживать путем рефакторинга и восстановления, однако, что DLL с этой экспортируемой функцией находится на складе Windows 8. См. Мой ответ ниже для более подробной информации.
добавлено автор Christopher Painter, источник

7 ответы

Добро пожаловать в мир анализа зависимости ад и приложений DLL.

Я обнаружил, что DLL на моей машине Win8 в SYSWOW64 (32-битная папка System32) с версией 7.0.9200.16384. Глядя на него, используя Dependency Walker , я вижу, что он фактически экспортирует функцию, которую вы ищете.

Я также вижу на моей машине InstallShield модуль слияния под названием MSVCRT.MSM, который перераспределяет версию 6.00.8797.0 этого файла. Однако, когда я смотрю его с помощью Dependency Walker, я вижу, что он имеет экспортированные функции _except_handler2 и _except_handler_3, но не _except_handler_4_common.

Поэтому вам нужна новая DLL, и этот модуль слияния вам не поможет. Microsoft использовала этот классный веб-сайт под названием DLL Help Database, который рассказал вам все версии файла и что их отправил, но, к сожалению, они его убили.

Кстати, я также вижу, что эта DLL установлена ​​в Windows в наши дни. Windows XP? Я не уверен, что мне нужно будет запустить виртуальную машину и посмотреть.

Пара возможных резолюций:

  1. Узнайте, какой SP или исправление для Windows исправляет это и делает его зависимым от вашего MSI.

  2. Возьмите DLL с машины Win 8 и добавьте ее в свой INSTALLDIR и внесите в нее конфиденциальность.

Последнее замечание. Это вызвано тем, что версия Windows XP поставляется со старой версией DLL (как указано в соответствующей статье KB Article), или что стороннее приложение удалило DLL, вызвав проблему. Здесь требуется еще некоторое исследование.

5
добавлено
Вы сказали, что это работает на Vista. Попробуйте это вместо этого
добавлено автор Christopher Painter, источник
Я имею в виду получить DLL с машины Vista и попробовать ее на машине XP, как указано в моем ответе.
добавлено автор Christopher Painter, источник
Я сказал вам, что могу, вам решать расследование.
добавлено автор Christopher Painter, источник
Большое спасибо за ваш ответ. Пока у меня еще нет машины Win 8. Можете ли вы сказать мне, могу ли я загрузить где-нибудь в Интернете «msvcrt.dll», который экспортирует функцию «_except_handler_4_common» (DLL, которая работает под XP 32 бит).
добавлено автор Léa Massiot, источник
Что вы имеете в виду? У некоторых наших клиентов и потенциальных клиентов все еще есть 32-битные машины Win XP. Нам нужно приложение. для работы с XP 32 бит тоже ...
добавлено автор Léa Massiot, источник
Я уже пробовал несколько DLL, включая DLL из Vista, без успеха. Можно ли загрузить определенную DLL из моей учетной записи Microsoft? Ваша dll работает только для 64-битных машин, не так ли?
добавлено автор Léa Massiot, источник

Эта проблема сохраняется для каждого программного обеспечения или игры, для которой требуются окна 7 или 8 или Vista, но запускается в windows xp. Поэтому, если вы хотите возобновить или запустить свою программу, вам необходимо обновить свои окна до 7 или 8 или Vista в соответствии с системными требованиями программы. НАДЕЖДА ЭТО БЫЛО ПОМОЩИ БЛАГОДАРЯ

2
добавлено
-1: Я компилирую программное обеспечение под Windows 7, которое отлично работает на Windows XP. Если бы я мог поставить -2 для предложения об обновлении, я бы сделал это: в большинстве ситуаций (но домашнее притирание) это не вариант. Лучшая подсказка может быть виртуальной машиной.
добавлено автор Zac, источник

Я провел последние 8 часов, разделив мой код на одну и ту же ошибку, и это оказалось частью кода в моем приложении, в частности, для проверки поддержки IPv6 в ОС:

conf.IPv6Disabled = !(Socket.OSSupportsIPv6);
  • Я прокомментировал, что строка и voila, ошибка исчезла.
1
добавлено
это должен быть ответ? Вам нужно прокомментировать ту же строку, что и ваша? и как мы должны знать, что такое conf и Socket? это нонсенс
добавлено автор Kira, источник
да, это должен быть ответ - вызов проверить, поддерживает ли сокет ipv6 в Windows XP, эта точная ошибка. «Socket.OSSupportsIPv6» является логическим в структуре .net.
добавлено автор Sean, источник

Этот пост старый, но я хотел оставить свое решение, так как эта проблема была для меня чертовски. Мое приложение python работало для Linux, Win7, 8 и 10, но WinXP отказался работать с этим сообщением.

Я использовал py2exe для получения исполняемого файла, и он добавит некоторые DLL вместе с EXE-файлом.

Удаление некоторых dll из каталога exe было единственной вещью, которая заставила приложение работать в XP и продолжить работу в других системах:

["POWRPROF.dll", "IPHLPAPI.DLL", "USP10.DLL", "DNSAPI.DLL"]

Также распространяется каталог «Microsoft.VC90.CRT» вместе с файлом exe, с его манифестными и DLL-файлами.

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

(я знаю, что OP не работал с python, но ошибка такая же)

1
добавлено

Я рекомендую сначала попробовать установить версию MSVC Redist версии 2008 года. Это включает в себя реализацию отсутствующей функции.

1
добавлено

У вашей программы есть зависимость, которая не выполняется в Windows XP. Вы можете попробовать использовать Dependency Walker для его идентификации или проверить известные ограничения. Например, Visual Studio 2012 не поддерживает Windows XP до обновления 1 и изменения опции сборки - это то, что вы используете?

0
добавлено
Большое спасибо за ваш ответ. В этом случае мой коллега все еще использует MSVisual 2005.
добавлено автор Léa Massiot, источник

Вероятно, проблема заключалась в том, что вы могли использовать поврежденную версию DirectX на своей Win XP. Это случилось со мной, потому что я случайно загрузил DirectX-установку, которая была повреждена и вызвала их. Решением, которое я сделал, было то, что я удалил все файлы, имеющие какое-либо отношение к DirectX от C: Windows/System32, удалил directX из программы добавления/удаления и полностью удалил весь раздел реестра из regedit. Local_machine/software/microsoft/DirectX ... То, что я сделал, было найдено исходные значения и ключи для DirectX 9 в сети и создал новый раздел реестра.

Папка DirectX была когда-то полностью и первоначально возвращена на regedit, и она показала в dxdiag, что DirectX установлен.

Если вы столкнулись с авариями в игре, я предлагаю вам загрузить .NET Framework 3.5 с пакетом обновления 1, а затем сделать резервную копию на вашем ПК (если вы не используете графические карты nVIDIA, как я, я использую ATI Radeon) и загружаю nVIDIA PhysX и посмотрите, работает ли он. (Вам нужны драйверы nVIDIA phydX для запуска этой игры без сбоев, только если вы используете Win XP, проблема не должна возникать на Win 7). Если драйверы испортили ваш компьютер (nVIDIA PhysX one), вы сможете восстановить старый компьютер (если вы сделали резервную копию своего ПК, я предлагаю использовать Acronis Boot для резервного копирования), это означает, что вам совершенно не повезло, если вы не можете получить nVIDIA PhysX на ур, например, графику ATI на Windows XP, потому что без nvidia physx, на Win XP, Metro не будет работать, а на Win 7/Vista/8 он должен.

0
добавлено
Я не заметил, что речь идет не о Metro, поэтому проигнорируйте последние несколько строк в ответе, это было о Metro 2033. Но если вы, возможно, захотите сыграть в эту игру, остальные несколько строк в ответе будут полезны, чтобы помочь вам запустить игра гладко.
добавлено автор PrototypeUK, источник
Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot