2010-01-13 5 views
2

Я пытаюсь развернуть приложение Visual C++ (разработанное с помощью Microsoft Visual Studio 2008) с помощью проекта установки и развертывания. После установки пользователи на некоторых целевых компьютерах получают следующее сообщение об ошибке после запуска исполняемого файла приложения: «Это приложение не запускалось, потому что неправильная конфигурация приложения. Повторная установка приложения может устранить проблему ». Другой пользователь после установки мог правильно запустить приложение. Я не могу найти основную причину этой проблемы, несмотря на несколько часов работы с файлами справки Visual Studio и онлайн-форумами (большинство сообщений датируются 2006 годом). У кого-нибудь из Stack Overflow есть предложение? Заранее спасибо. Дополнительная информация приведена ниже.Что делает развертывание успешным для некоторых пользователей и безуспешно для других?

Приложение использует FLTK 1.1.9 для библиотеки GUI, а также некоторые библиотеки Boost 1.39 (regex, lexical_cast, date_time, math).

Я убедился, что пытаюсь развернуть версию выпуска (а не версию отладки) приложения. Библиотека Runtime в настройках генерации кода - многопоточная DLL (/ MD).

Зависимость Уолкер MYAPP.EXE списков следующие библиотеки DLL: wsock32.dll, comctl32.dll, kernel32.dll, user32.dll, gdi32.dll, shell32.dll, ole32.dll, mvcp90.dll, msvcr90. длл.

В проекте установки и развертывания я добавляю следующие библиотеки DLL в файловую систему на целевой машине: fltkdlld.dll и папку с именем Microsoft.VC90.CRT с msvcm90.dll, msvcp90.dll, mcvcr90.dll и Microsoft.VC90.CRT.manifest.

Процесс установки на целевых компьютерах, получающих сообщение об ошибке, требует установки .Net Framework 3.5.

Любое предложение? Заранее спасибо!

ответ

1

Добавить Visual C++, распространяемый в ваш проект развертывания, и обязательно запустите Setup.exe вместо MSI при установке. Это вызовет загрузчик VCRedist, чтобы убедиться, что ваш компьютер имеет эти фрагменты перед установкой приложения.

Dependency Walker показывает только статические (время связи) зависимостей - он не может знать о динамических зависимостях, таких как COM-объекты.

+0

Привет - Спасибо за ваш ответ. В моем сообщении выше я подробно расскажу, как у меня уже есть папка (в проекте установки и развертывания в Файловой системе на целевой машине) с именем Microsoft.VC90.CRT с msvcm90.dll, msvcp90.dll, mcvcr90.dll и Microsoft. VC90.CRT.manifest. Разве это не распространяемый Visual C++, который вы упомянули в своем ответе? – Julien

+0

Это не то же самое, нет. Моя проблема заключается в том, что эти DLL-файлы MSVCRT могут быть неправильной версией для всех ваших зависимостей ... Чтобы проверить, на рабочем компьютере, используйте Process Explorer, чтобы определить полный список DLL-файлов, которые используются, и сравнить их с версиями, повторно отправка. На рабочей машине может быть установлена ​​какая-то (неясная) вещь, которая отправила другую версию DLL. – JBRWilkinson

+0

Хорошо. Я добавил файл vcredist_x86.exe в проект установки и развертывания.Это то, что вы подразумеваете под словом «Добавить Visual C++ Redistributable в ваш проект развертывания»? Затем я попросил пользователя на целевой машине запустить новый файл setup.exe (с новым * .msi), и сообщение об ошибке все еще появляется. Любое понимание? – Julien

1

У меня была аналогичная проблема после обновлений безопасности ATL в прошлом году. Моему приложению понадобилась более поздняя версия библиотек времени выполнения C++, чем в проекте развертывания.

Попробуйте запустить Windows Update на целевых компьютерах после установки или загрузить и установить последний (28 июля 2009 г.) C++ распространяемый пакет напрямую.

http://support.microsoft.com/?kbid=973551

Это решило проблему для меня. Тем не менее, я еще не исправил проект развертывания.

 Смежные вопросы

  • Нет связанных вопросов^_^