我的测试程序中存在一个错误,当我单击其主窗口上的“关闭”按钮时,会导致API调用失败。错误报告打印错误并调用DebugBreak()
。当Windows询问该怎么做时,我选择关闭该应用程序。但是,在它执行此操作后,会弹出以下对话框:
告诉我Windows认为该程序与Windows不兼容,并且已经应用了一些兼容性修补程序。
我知道这个错误不受兼容性修补程序的影响,我打算修复它。但是,我担心这会影响我可能还不知道的其他错误,而且我的程序需要Vista SP2 +平台更新(我应该只将它推到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位。
感谢。
答案 0 :(得分:0)
我的测试程序中存在错误
那为什么不修复bug,而不是试图解决它?
我是否只是在该清单的末尾滑过该块
是
我需要两个单独的清单吗
没有。可执行文件只能有一个清单,因此需要包含所有内容。 Visual Studio允许您在单独的部分中指定一些清单内容,然后将它们合并到最终资源中。