2012-01-24 4 views
5

Я работаю над 64-битной ОС Windows 7 с конечной машиной VS2008 с 64-битным аддоном.Ошибка конфигурации сбоя для 64-битной отладочной сборки в VS2008

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

Unable to Start program xxx This application has failed to start because application configuration is incorrect. Review the manifest file for possible errors. Reinstalling the application may fix this problem. For more retails see application event log.

Я запустил ходуну зависимости. Из redistibutable пути 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 моего решения.

Наконец Dependency Walker не имели каких-либо желтые метки (отсутствующие файлы) слева, но все же он дал ошибки как:

Error: At least one required implicit or forwarded dependency was not found. Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module. Error: Modules with different CPU types were found. Error: The Side-by-Side configuration information in "e:\xyz.EXE" contains errors. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail (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-битной сборки ru n успешно?

Пожалуйста, помогите мне, поскольку я уже проверил много вопросов, но не нашел приемлемого решения.

+0

Не дубликат, но возможно связанный? Не уверен, что это вообще поможет: http://stackoverflow.com/questions/3803825/vc-crt-redist-problem –

+0

Вы пытаетесь запустить сборку на другой машине, чем вы ее построили? Обычно время отладки «не распространяется», что означает, что вы не можете запускать его на других машинах без создания модулей слияния и их установки на любом компьютере, на котором вы пытаетесь запустить код. – Benj

+0

@Nic - Я не думаю, что этот вопрос поможет, этот человек просто не хватает правильной версии исполнения. Время отладки - это боль ... Обычно создание «проекта установки» в VS обрабатывает модули слияния для вас, чтобы вы могли установить их вместе со своими двоичными файлами с помощью отладочной сборки. – Benj

ответ

5

Thankyou для ответа на мой вопрос. Я, наконец, решил это, и вот решение:

Mine было решением VC++ на основе Qt, приложение зависело от некоторых сторонних DLL & libs. Моя задача состояла в том, чтобы предоставить 64-битную поддержку моему приложению, для которого у меня были сборки Qt и сторонних dlls & libs в 64-разрядной ОС.

У меня возникла ошибка CRT, когда я попытался запустить мое приложение в отладочной 64-битной конфигурации.Ошибка сохраняется даже после того, как я скопировал следующие ЦРТС в папку бин моего приложения

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, когда я вставил выше ЦРТС в соответствующих бин папок, где Qt и 3 библиотеки партии присутствовал.

+0

Подсказка: вы должны быть способны принять свой собственный ответ. –

1

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

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

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

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

2

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

Когда я снял его с манифестом, сторона по ошибке Side исчез.

+0

Добро пожаловать и спасибо за альтернативный ответ, MrTheV. –

+0

Как вы удалили его из манифеста? – user3731622