“应用程序配置不正确”和“并行配置不正确”运行VS2008 64位调试版本

时间:2012-01-24 06:47:32

标签: c++ visual-studio-2008 manifest 64-bit debug-build

我正在使用64位操作系统Windows 7终极机VS2008,64位插件。

我已成功建立了32和20的项目。 64位,调试和发布配置。 64位调试没有启动;它给出了错误:

  

无法启动程序xxx   此应用程序无法启动,因为应用程序配置不正确。查看清单文件以查找可能的错误。重新安装应用程序可能会解决此问题。有关更多零售商,请参阅应用程序事件日志。

我运行了依赖性walker。 从可重新编写的路径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文件夹中。

最后,依赖者walker没有留下任何黄色标记(丢失的文件),但它仍然给出了如下错误:

  

错误:找不到至少一个必需的隐式或转发依赖项。   错误:由于隐式依赖模块中缺少导出功能,至少有一个模块具有未解析的导入。   错误:找到了具有不同CPU类型的模块。   错误:" e:\ xyz.EXE"中的Side-by-Side配置信息;包含错误。应用程序无法启动,因为它的并排配置不正确。请参阅应用程序事件日志或使用命令行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 个答案:

答案 0 :(得分:5)

谢谢你回答我的问题。我终于解决了它,这是解决方案: -

Mine是一款基于Qt的VC ++解决方案,该应用依赖于一些第三方dll&amp;库。 我的任务是为我的应用程序提供64位支持,我已经在64位操作系统中构建了Qt和第三方dll&libs。

当我在调试64位配置中尝试运行我的应用程序时,我收到了CRT错误。即使我将以下CRT复制到我的应用程序的bin文件夹

之后,错误仍然存​​在

redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT

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

    1. vcomp90d.dll
    2. 当我将上述CRT粘贴到Qt和第三方库所在的相应bin文件夹中时,我能够以调试64位模式成功启动我的应用程序。

答案 1 :(得分: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>

当我从清单中删除它时,并排错误消失了。

答案 2 :(得分:1)

取决于并排依赖关系并不是很好,因为当实际需要稍微不同的版本时,它通常会使它看起来像找到dll。

您可以使用sxstrace.exe更好地了解缺少的内容:

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

事件日志通常会显示并排错误,但遗憾的是,除了您遇到问题之外,这些信息不会为您提供更多信息。

答案 3 :(得分:0)

安装VS2008 SP1 以解决此问题。

  • 安装之前,请确保在安装Visual Studio时选择了“64位编译器和工具”功能。 (如果在安装SP1后安装它,则可能需要卸载并重新安装SP才能获得修复。)

  • 要检查您是否安装了SxS条目,请查看amd64_microsoft.vc90.debugcrt*中是否有名称为%WinDir%\WinSxS的目录。

原因是VS2008安装程序中存在错误。它只将32位版本的DebugCRT安装到<Windows>\WinSxS缓存中,所有程序都可以在其中找到它。它确实在%ProgramFiles%下安装了相同的DLL,但程序无法在那里找到它们。

虽然包含x64 DebugCRT shared assembly组件的功能是“广告”而不是出于某种原因安装。这可以在安装日志中看到,VS2008安装程序通过搜索“%Temp%”在安装用户的DebugCRT中离开。 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist(作为另一个组件的一部分)确实存在相同的文件,但不会复制到WinSxS

(通过查看vs_setup.msi内容Orca,最可能的直接原因似乎是隐藏的功能条目缺少msidbFeatureAttributesFollowParent flag,这导致它们永远不会被安装。)< / p>

无论原因是什么,VS2008 SP1修复了它。它的安装有副作用:它还强行安装许多在VS2008安装期间可能选择或未选择的其他功能(例如MFC / ATL运行时),但与安装损坏相比,这样会带来更少的不便。