"неправильная конфигурация приложения" и "неправильная параллельная конфигурация" при запуске 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:

  1. Microsoft.VC90.DebugCRT.manifest
  2. msvcm90d.dll
  3. msvcp90d.dll
  4. msvcr90d.dll

Microsoft.VC90.DebugOpenMP:

  1. 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), но по сравнению со сломанной установкой, что является гораздо меньшим неудобством.

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