"неправильная конфигурация приложения" и "неправильная конфигурация" при запуске VS2008 64-bit debug build - PullRequest
7 голосов
/ 24 января 2012

Я работаю на 64-битной операционной системе Windows 7 Ultimate VS2008 с 64-битной надстройкой.

Я успешно собрал свои проекты в 32- и 64-битной конфигурации, отладке и выпуске. 64-битная отладка не запускается; выдает ошибку:

Невозможно запустить программу ххх Это приложение не удалось запустить из-за неправильной конфигурации приложения. Просмотрите файл манифеста на предмет возможных ошибок. Переустановка приложения может решить проблему. Для большего количества розничных продаж смотрите журнал событий приложения.

Я запустил ходунка с зависимостями. Из пути для повторного использования 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.DebugOpenMP vcomp90d.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 ]

5 голосов
/ 01 февраля 2012

Спасибо, что ответили на мой вопрос.Я наконец-то решил ее, и вот решение: -

Мой был VC ++ решением на основе Qt, приложение зависело от некоторых сторонних библиотек и библиотек.Моя задача состояла в том, чтобы обеспечить 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 и сторонних производителей.

2 голосов
/ 21 сентября 2012

У меня возникла та же проблема после добавления манифеста для «Повышение привилегий» к моему консольному приложению 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>

Когда я удалил его из манифеста, ошибка «Бок о бок» исчезла.

1 голос
/ 24 января 2012

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

Вы можете использовать sxstrace.exe, чтобы лучше понять, чего не хватает:

http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

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

0 голосов
/ 09 апреля 2018

Установите VS2008 SP1 , чтобы исправить это.

  • Перед установкой убедитесь, что 64-битные компиляторы "иtools " функция была выбрана при правильной установке Visual Studio.(Если вы установите его после установки SP1, вам, вероятно, потребуется удалить и переустановить SP, чтобы получить исправление.)

  • Чтобы проверить, установлена ​​ли у вас запись SxS, посмотрите, есть ликаталоги с такими именами, как amd64_microsoft.vc90.debugcrt* в %WinDir%\WinSxS.


Причина - ошибка в установщике VS2008.Он только устанавливает 32-разрядную версию DebugCRT в кэш <Windows>\WinSxS, где все программы могут его найти.Он устанавливает те же DLL-библиотеки под %ProgramFiles%, но программы не могут их там найти.

Хотя функция, содержащая компонент общей сборки x64 DebugCRT , «рекламируется», а не устанавливается для некоторыхпричина.Это можно увидеть в журналах установки, что установщик VS2008 оставляет в %Temp% пользователя, выполняющего установку, выполняя поиск в нем «DebugCRT».Те же файлы действительно присутствуют в c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist (как часть другого компонента), но не дублируются до WinSxS.

(При просмотре содержимого vs_setup.msi с Orca наиболее вероятная прямая причина, по-видимому, заключается в том, что в записях скрытых объектов отсутствует флаг msidbFeatureAttributesFollowParent , что приводит ких никогда не устанавливать.)

Какова бы ни была причина, VS2008 SP1 исправляет это.Его установка имеет побочный эффект: он также принудительно устанавливает множество других функций, которые могли или не могли быть выбраны во время установки VS2008 (например, время выполнения MFC / ATL), но по сравнению со сломанной установкой, что является гораздо меньшим неудобством.

...