【发布时间】:2015-12-31 17:32:41
【问题描述】:
我的测试程序中存在一个错误,当我单击其主窗口上的关闭按钮时导致 API 调用失败。错误报告打印错误并调用DebugBreak()。当 Windows 询问要做什么时,我选择关闭应用程序。然而,在它这样做之后,会弹出这个对话框:
告诉我 Windows 认为该程序与 Windows 不兼容,并且已应用了一些兼容性修复程序。
我知道这个错误不受兼容性修复的影响,我确实打算修复它。但是,我担心这会影响我可能还不知道的其他错误,并且我的程序需要 Vista SP2+Platform Update(我也应该将它提升到 7...),所以在兼容模式下运行是不受欢迎。
可执行文件位于网络驱动器上。
我知道我可以通过应用程序兼容性清单来解决这个问题,测试程序和它使用的 DLL 都没有。所以我的第一个问题是:单独应用清单是否足以撤消兼容性更改,还是我必须进入注册表并手动删除任何 PCA 更改(或彻底禁用 PCA)?
其次,我已经有一个 Common Controls 6 清单。我是否只是在该清单末尾滑动 <compatibility> 块,还是为此需要两个单独的清单?或者换句话说,这是正确的吗?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
作为CREATEPROCESS_MANIFEST_RESOURCE_ID 资源?
最后,如果我执行上述操作,我如何验证 PCA 修改不再被应用?
这是 Windows 7 64 位。
谢谢。
【问题讨论】: