Мы переместили наше решение 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 в папку приложения.
Что я делаю не так ?
В установщике выберите модули слияния Visual Studio 2005. Это также может произойти, если вы создали exe / dll с помощью Visual Studio, в которой установлен пакет обновления.
Копирование DLL CRT не рекомендуется. Как говорит Винай, вы должны использовать правильные модули слияния.
Вы также можете использовать redist install exe, если модули слияния не работают с вашей технологией установки:
В крайнем случае попробуйте скопировать весь каталог Microsoft.VC80.CRT в каталог exe вашей программы (не содержимое, а фактический каталог).
У меня тоже была эта проблема. Я был потрясен в Microsoft за то, что так поступил с нами. (Я использовал VC6 для сборки конкретного проекта, а затем, когда я также установил 2003 и 2005 на машину сборки, это вызвало проблемы с моей сборкой VC6 (я не проверял установки на нетронутой машине) По-видимому, компоновщик / компилятор понятия не имел что он делал, так что это вызвало проблемы с моим распространяемым файлом. Затем мне пришлось добавить ОГРОМНЫЙ установочный файл redist в мое приложение 120k exe. Freakin 'microsoft.
MS несколько раз облажалась с этим в прошлом.
Вам действительно не нужна библиотека времени выполнения 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
Я думаю, это не вариант, поскольку мы используем Innosetup для нашего установщика.