应用程序清单:将添加一个撤消程序兼容性助手所做的更改,并将其与Visual Styles清单合并吗?

时间:2015-12-31 17:32:42

标签: winapi manifest

我的测试程序中存在一个错误,当我单击其主窗口上的“关闭”按钮时,会导致API调用失败。错误报告打印错误并调用DebugBreak()。当Windows询问该怎么做时,我选择关闭该应用程序。但是,在它执行此操作后,会弹出以下对话框:

Program Compatibility Assistant dialog, not the installer one

告诉我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位。

感谢。

1 个答案:

答案 0 :(得分:0)

  

我的测试程序中存在错误

那为什么不修复bug,而不是试图解决它?

  

我是否只是在该清单的末尾滑过该块

  

我需要两个单独的清单吗

没有。可执行文件只能有一个清单,因此需要包含所有内容。 Visual Studio允许您在单独的部分中指定一些清单内容,然后将它们合并到最终资源中。