我正在使用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位构建成功运行?
请帮助我,因为我已经检查了很多问题,但没有找到任何可行的解决方案。
答案 0 :(得分:5)
谢谢你回答我的问题。我终于解决了它,这是解决方案: -
Mine是一款基于Qt的VC ++解决方案,该应用依赖于一些第三方dll&amp;库。 我的任务是为我的应用程序提供64位支持,我已经在64位操作系统中构建了Qt和第三方dll&libs。
当我在调试64位配置中尝试运行我的应用程序时,我收到了CRT错误。即使我将以下CRT复制到我的应用程序的bin文件夹
之后,错误仍然存在 redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT
:
Microsoft.VC90.DebugCRT.manifest
msvcm90d.dll
msvcp90d.dll
msvcr90d.dll
Microsoft.VC90.DebugOpenMP
:
vcomp90d.dll
当我将上述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运行时),但与安装损坏相比,这样会带来更少的不便。