应用程序无法加载 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吗?

运行没有运行时可再发行组件的 C++ 二进制文件(Server 2k3、XP SP3)

应用程序启动时奇怪的 comctl32.dll 加载/卸载

高悬赏:安装xp sp3时,重启后出现lsass.exe-系统错误,再重启后正常