【问题标题】:Application manifests: will adding one undo the changes Program Compatibility Assistant made, and do I merge it with a Visual Styles manifest?应用程序清单:添加一个会撤消程序兼容性助手所做的更改,我是否将其与视觉样式清单合并?
【发布时间】: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 位。

谢谢。

【问题讨论】:

    标签: winapi manifest


    【解决方案1】:

    我的测试程序有错误

    那为什么不修复这个错误,而不是尝试解决它呢?

    我是否只是在清单末尾滑动块

    是的

    我需要两个单独的清单吗

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

    【讨论】:

    • 我应该解释一下;是的,我确实必须修复这个错误,但我担心兼容性补丁也会掩盖其他错误! (我知道它不会影响这个。我知道发生了什么,但不知道为什么会发生;不过,这与子窗口被过早销毁有关。)谢谢;同时,我编辑了问题以添加该上下文。
    • 好的,我添加了清单,程序崩溃了,然后将其取下并再次崩溃;兼容性对话框没有回来。那么我怎么知道兼容性修复不再被应用呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多