"неправильная конфигурация приложения" и "неправильная параллельная конфигурация" при запуске 64-битной отладочной сборки VS2008
Я работаю на 64-битной ОС Windows 7 конечной машине VS2008 с 64-битным аддоном.
Я успешно собрал свои проекты в 32- и 64-битной конфигурации, отладке и выпуске. 64-битная отладка не запускается; это дает ошибку:
Невозможно запустить программу xxx Это приложение не удалось запустить из-за неправильной конфигурации приложения. Просмотрите файл манифеста на предмет возможных ошибок. Переустановка приложения может решить проблему. Для большего количества розничных продаж смотрите журнал событий приложения.
Я побежал ходок зависимости. Из пути для повторного использования C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT я добавил Microsoft.VC90.DebugCRT.manifest msvcm90d msvcp90d msvcr90d Microsoft.VC90.DcompugMPpen. sll в папке bin\debug моего решения.
Наконец, у обходчика зависимостей не осталось желтых меток (отсутствующих файлов), но все равно он выдавал ошибки вроде:
Ошибка: не найдена хотя бы одна необходимая неявная или перенаправленная зависимость. Ошибка: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в неявно зависимом модуле. Ошибка: были найдены модули с разными типами ЦП. Ошибка: информация о конфигурации Side-by-Side в "e:\xyz.EXE" содержит ошибки. Не удалось запустить приложение, так как его параллельная конфигурация неверна. Пожалуйста, смотрите журнал событий приложения или используйте инструмент командной строки sxstrace.exe для более подробной информации (14001).
32-битный манифест говорит:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" **processorArchitecture="x86"** publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Принимая во внимание, что 64-битный манифест отладки имеет:
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
Я не могу понять, почему отладочная 32-разрядная сборка выполняется успешно?
Пожалуйста, помогите мне, так как я уже проверил много вопросов, но не нашел никакого приемлемого решения.
4 ответа
Спасибо, что ответили на мой вопрос. Я наконец решил это, и вот решение:-
Моё решение было основано на Qt VC++, приложение зависело от некоторых сторонних библиотек и библиотек. Моя задача состояла в том, чтобы предоставить 64-битную поддержку моему приложению, для которого я собирал Qt и сторонние библиотеки и библиотеки в 64-битной ОС.
Я получил ошибку CRT при попытке запустить мое приложение в отладочной 64-битной конфигурации. Ошибка сохранилась даже после того, как я скопировал следующие CRT в папку bin моего приложения
redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT
:
Microsoft.VC90.DebugCRT.manifest
msvcm90d.dll
msvcp90d.dll
msvcr90d.dll
Microsoft.VC90.DebugOpenMP
:
vcomp90d.dll
Мне удалось успешно запустить мое приложение в отладочном 64-битном режиме, когда я вставил вышеуказанные CRT в соответствующие папки bin, где присутствовали библиотеки Qt и сторонних производителей.
У меня возникла та же проблема после добавления манифеста для "Повышение привилегий" к моему консольному приложению Delphi (32 бита, проблема при запуске на Win7 x64). Проблема была связана с зависимостью, упомянутой в файле манифеста:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
Когда я удалил его из манифеста, ошибка "Бок о бок" исчезла.
Зависит не очень хорошо с параллельными зависимостями, потому что это часто может заставить его выглядеть так, будто dll найдена, когда на самом деле требовалась немного другая версия.
Вы можете использовать sxstrace.exe, чтобы получить лучшее представление о том, чего не хватает:
http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx
Журнал событий обычно показывает параллельные ошибки, но, к сожалению, они не дают вам много информации, кроме того, что у вас есть проблема.
Установите VS2008 SP1, чтобы исправить это.
Перед установкой убедитесь, что при установке самой Visual Studio выбрана функция "64-битные компиляторы и инструменты". (Если вы установите его после установки SP1, вам, вероятно, потребуется удалить и переустановить SP, чтобы получить исправление.)
Чтобы проверить, установлена ли у вас запись SxS, посмотрите, есть ли каталоги с такими именами, как
amd64_microsoft.vc90.debugcrt*
в%WinDir%\WinSxS
,
Причина - ошибка в установщике VS2008. Он устанавливает только 32-разрядную версию DebugCRT в <Windows>\WinSxS
кеш, где все программы могут его найти. Он устанавливает те же библиотеки под %ProgramFiles%
но программы не могут найти их там.
Хотя функция, содержащая компонент общей сборки DebugCRT x64, по какой-то причине "рекламируется", а не устанавливается. Это можно увидеть в журналах установки, которые установка VS2008 оставляет в %Temp%
пользователя установки путем поиска их DebugCRT
". Те же файлы действительно присутствуют в c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist
(как часть другого компонента), но не дублируются WinSxS
,
(Глядя на vs_setup.msi
По-видимому, наиболее вероятной прямой причиной этого является то, что в записях скрытых функций отсутствует msidbFeatureAttributesFollowParent
флаг, который заставляет их никогда не быть установлен.)
Какова бы ни была причина, VS2008 SP1 исправляет это. Его установка имеет побочный эффект: он также принудительно устанавливает множество других функций, которые могли или не могли быть выбраны во время установки VS2008 (например, время выполнения MFC/ATL), но по сравнению со сломанной установкой, что является гораздо меньшим неудобством.