Бок о бок безумие - запуск двоичных файлов на одном компьютере - PullRequest
3 голосов
/ 02 января 2011

Вот моя конфигурация:

  • Компьютер A - Windows 7, MS Visual Studio 2005 исправлен для совместимости с Win7 (8.0.50727.867)
  • Компьютер B - Windows XP SP2, MS VisualУстановленная Studio 2005 (8.0.50727.42)

Мой проект имеет некоторые внешние зависимости (встроенные библиотеки DLL - либо основаны на A , либо загружены из Интернета), пара библиотек DLL построена изисходники и один исполняемый файл.Я в основном работаю на A и там все хорошо.В какой-то момент я пытаюсь построить свой проект на компьютере B , копируя предварительно созданные библиотеки DLL в выходную папку.Все хорошо, но при попытке запустить мое приложение я получаю

Не удалось правильно инициализировать приложение (0xc0150002) ....

Журнал событий содержит два из них.:

Зависимая сборка Microsoft.VC80.CRT не найдена, а последняя ошибка была. Указанная сборка не установлена ​​в вашей системе.

плюс немного более забавный

Не удалось создать контекст активации для some.dll.Справочное сообщение об ошибке: Операция успешно завершена.

На данный момент я пробую свой Google-Fu, но тщетно - практически все попадания касаются запуска двоичных файлов на машинах без Visual Studio установлена.В моем случае, однако, исполняемые файлы не запускаются на компьютере, на котором они построены.

Следующим шагом было использование средства обхода зависимостей, и это еще больше сбило меня с толку - мои библиотеки DLL, созданные из источников в одном блоке, не могут найти MSVCR80.DLL и MSVCP80.DLL, однако исполняемый файл, кажется, в порядке в отношении этих двух библиотек DLL, т.е. когда я открываю исполняемый файл с помощью обходчика зависимостей, он показывает, что MSVC?80.DLL s можно найти, но когда я открываю одну из моих библиотек DLL, этоговорит, что они не могут.Вот где у меня совершенно нет идей, что делать, поэтому я прошу вас, дорогой stackoverflow:)

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

Ответы [ 4 ]

3 голосов
/ 22 марта 2011

На ваш вопрос есть ответ на вашу проблему: Компьютер A имеет среду выполнения VC версии 8.0.50727.867 , а Компьютер B имеет только версию 8.0.50727.42 .

Вы создали свои библиотеки на компьютере A, и они зависят от версии V67 среды выполнения VC.(Это можно найти в манифесте, встроенном в библиотеки.) Когда вы копируете их на компьютер B, этим библиотекам по-прежнему требуется версия 867 среды выполнения, но у вас есть только версия 42.

Для разрешения зависимостей сборки среды выполнения VCна компьютере B необходимо установить распространяемые файлы среды выполнения VC версии 867. Однако я бы посоветовал вам обновить Visual Studio на компьютере B, чтобы иметь одинаковую версию на обоих компьютерах.И что еще лучше, установите Visual Studio 2005 SP1 на оба компьютера, а затем установите это обновление для системы безопасности на SP1 .После установки последнего ваши библиотеки будут зависеть от версии 8.0.50727.4053 .

1 голос
/ 02 января 2011

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

0 голосов
/ 02 января 2011

У меня недавно была такая же ошибка при создании проектов на одной машине, а затем при перемещении их на другую машину.Самым большим виновником здесь, вероятно, является отладочная конфигурация для одного из двоичных компонентов.То есть MSVC предъявляет довольно жесткие требования ко всем DLL / EXE-файлам, создаваемым с использованием одной и той же библиотеки времени выполнения, отладки или выпуска, в противном случае они не будут работать вместе.хорошо, но когда вы пытаетесь запустить их, вы получаете это крайне загадочное сообщение об ошибке.

Вы должны убедиться, что каждый модуль, который вы собираете, использует одну и ту же конфигурацию, таким образом отлаживая или выпуская по всей цепочке сборки.Эта ошибка также, вероятно, приводит к несовпадениям в других библиотеках, поэтому убедитесь, что ваш MSVC является точно такой же версией на компьютерах, на которых вы работаете.

0 голосов
/ 02 января 2011

сначала я бы проверил готовые dll, подготовив фиктивный проект для их загрузки

...