我的应用程序(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 中缺少的过程。此外,日志似乎被中断而没有特定错误。
您是否知道为什么在使用清单时应用程序似乎被中断,甚至没有崩溃或消息?