Не удалось запустить приложение ... неверная конфигурация приложения - проблема времени выполнения VC++ 2005

Мы переместили наше решение Visual C++ 2003 на Visual 2005, и теперь у нас проблемы с развертыванием на чистых машинах XP.

В нашем решении есть проект DLL и исполняемый файл командной строки, который использует эту DLL. Оба проекта создают и встраивают файлы манифеста.

Наш установщик также копирует среды выполнения VC8 CRT из C: \ Program \ Microsoft Visual Studio 8 \ VC \ redist \ x86 \ Microsoft.VC80.CRT \ в каталог установки.

Когда мы устанавливаем на чистую Windows XP, мы видим сообщение об ошибке «Не удалось запустить приложение ... неверная конфигурация приложения».

Помещение exe в Depends.exe говорит:

Error: The Side-by-Side configuration information for "c:\program files\MySoftware\vc8\BENCHMARK.EXE" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Error: The Side-by-Side configuration information for "c:\program files\MySoftware\vc8\MYLIB-VC8.DLL" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

Журналы просмотра событий:

Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was The referenced assembly is not installed on your system.

Resolve Partial Assembly failed for Microsoft.VC80.CRT. Reference error message: The referenced assembly is not installed on your system.

Generate Activation Context failed for C:\Program Files\MySoftware\vc8\Benchmark.exe. Reference error message: The operation completed successfully.

Я читал, что достаточно скопировать файлы msvcp80.dll, msvcr80.dll, msvcm80.dll и Microsoft.VC80.CRT.manifest в папку приложения.

Что я делаю не так ?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
45 420
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В установщике выберите модули слияния Visual Studio 2005. Это также может произойти, если вы создали exe / dll с помощью Visual Studio, в которой установлен пакет обновления.

Я думаю, это не вариант, поскольку мы используем Innosetup для нашего установщика.

Paul Baumer 07.11.2008 15:41
Ответ принят как подходящий

Копирование DLL CRT не рекомендуется. Как говорит Винай, вы должны использовать правильные модули слияния.

Вы также можете использовать redist install exe, если модули слияния не работают с вашей технологией установки:

В крайнем случае попробуйте скопировать весь каталог Microsoft.VC80.CRT в каталог exe вашей программы (не содержимое, а фактический каталог).

У меня тоже была эта проблема. Я был потрясен в Microsoft за то, что так поступил с нами. (Я использовал VC6 для сборки конкретного проекта, а затем, когда я также установил 2003 и 2005 на машину сборки, это вызвало проблемы с моей сборкой VC6 (я не проверял установки на нетронутой машине) По-видимому, компоновщик / компилятор понятия не имел что он делал, так что это вызвало проблемы с моим распространяемым файлом. Затем мне пришлось добавить ОГРОМНЫЙ установочный файл redist в мое приложение 120k exe. Freakin 'microsoft.

MS несколько раз облажалась с этим в прошлом.

http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en

Вам действительно не нужна библиотека времени выполнения Microsoft VC80 C. Это беспорядок.

Вместо этого повторно свяжите свою программу с параметром / MT, который статически связывает библиотеку времени выполнения c (libcmt.lib) или стандартную библиотеку C++. Чтобы установить это через свойства проекта, перейдите в

C/C++ -> Code Generation -> Runtime Library: Multi-threaded (/MT)

Если он не компилируется, вы можете также добавить эту опцию (/ NODEFAULTLIB :)

Linker -> Input -> Ignore Specific Library: msvcrt.lib

См. Параметры ссылки от http://msdn.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx

Другие вопросы по теме