应用程序无法加载 XP SP3 和与 comctl32 相关的清单
Posted
技术标签:
【中文标题】应用程序无法加载 XP SP3 和与 comctl32 相关的清单【英文标题】:Application does not load with XP SP3 and a manifest related to comctl32 【发布时间】:2010-12-21 20:39:51 【问题描述】:我的应用程序(C++,使用 Mingw 编译,主要使用 wxWidgets、Boost 和 SFML)在 Windows 7 或 Vista 上运行流畅,但在 Windows XP SP3 上无法正常运行。我有一个 .manifest 文件,它允许可执行文件使用 Windows XP/Vista/7 外观:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="Game Develop Editor.Release - Edittime.App"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>Executable</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
如果我删除/重命名清单文件,我可以使用 Windows XP SP3 启动可执行文件(但使用丑陋的过时控件)。如果我让清单文件运行,它在 Vista/7 上运行没有问题,但在 Windows XP SP3 上,应用程序加载到内存中(我可以在任务管理器中看到它)但什么也不做。没有错误信息,它甚至不会崩溃。
如果我重新编译它以显示控制台,后者不会显示任何内容。
如果我使用 gdb 调试它,调试器会显示“正在启动程序:...”然后被阻止(Control+C 不起作用)。
我尝试在可执行文件上使用 Dependency Walker。 这是带有清单文件的日志:http://pastebin.com/J6T8KBH8 (这里是没有清单的日志:http://pastebin.com/zrYzRaWE/在这种情况下,应用程序加载没有问题,并且在日志末尾仍然运行。)
我已经突出显示了 Dependency Walker 中显示为红色的行,它指的是 comctl32 中缺少的过程。此外,日志似乎被中断而没有具体错误。
您是否知道为什么在使用清单时应用程序似乎被中断,甚至没有崩溃或消息?
【问题讨论】:
【参考方案1】:事实证明,该问题仅在使用最新版本的 SFML 库时出现。 准确地说,SFML 库的名称在最近的版本中已从“sfml-xxx.dll”更改为“sfml-xxx-2.dll”。
使用新名称链接到最新版本的库时,应用程序不想在 Windows XP SP3 上启动。我已经调整了用于编译 SFML 的 CmakeList.txt 文件,以便使用库的旧名称( sfml-xxxx.dll ),并且在链接到这些库时,程序运行良好。 唯一不同的是库名称。但是,在 Dependency Walker 中,我看到当使用新名称 (sfml-xxxx-2.dll) 时,SFML 库会出现在 before wxWidgets 和 windows 相关库中。当我使用旧名称 ( sfml-xxxx.dll ) 时,SFML 库显示在列表的末尾。
【讨论】:
以上是关于应用程序无法加载 XP SP3 和与 comctl32 相关的清单的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Windows XP SP3 目标调试大型 delphi XE2 应用程序跨平台
windows XP Sp3 简体中文(官方正版认证)【微软正版XP操作系统SP3专业版】 怎么装呀?
XP SP3 32位的能装NET Framework 4吗?