5

我正在 Windows 8 机器上测试我的桌面应用程序,我注意到任务管理器详细信息视图中有一个名为“操作系统上下文”的新列。这显示了我的应用程序在“Windows Vista”上下文中运行。

我没有在应用程序清单中指定任何内容来强制应用程序在 Visual Studio 中的此上下文下运行。该应用程序是一个 Visual C++ 应用程序,在 Visual Studio 2010 中构建。

不要误会我的意思,该应用程序在 Windows 8 上运行顺畅,所以我不想解决崩溃或错误。看到这样的事情让我很恼火,我想解决它。

所以我的问题是如何让我的应用程序在 Windows 8 下的“Windows 8”上下文中运行?

4

1 回答 1

9

好的,我想我在这里找到了答案。它说:

默认情况下,清单中没有兼容性部分的应用程序将在 Windows 7 和未来的 Windows 版本上接收 Windows Vista 行为

因此,如果您的清单中没有任何内容,Vista 就是您所得到的。阅读本文的其余部分,似乎您能做的最好的事情是获得 Windows 7 而不是 Windows 8,所以也许这是商店应用程序特有的东西?

编辑

好的,我终于找到了 Windows 8 所需的条目:

<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>

所以试着把它放在清单的兼容性部分。

我知道您使用的是 VS2010,所以这可能会有所不同,但是使用 VS2012,我做了以下操作:

  1. 创建了一个新的 WPF 应用程序
  2. 在解决方案资源管理器中右键单击项目并选择添加新项目
  3. 从列表中选择应用程序清单

一个新的清单被添加到项目中,兼容性设置被注释掉了。未注释所有内容的精简示例如下:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  <application>
    <!-- A list of all Windows versions that this application is designed to work with. 
    Windows will automatically select the most compatible environment.-->

    <!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>

    <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>

    <!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>

  </application>
</compatibility>
</asmv1:assembly>

重建后,应用程序在任务管理器中按预期显示:

在此处输入图像描述

于 2013-04-04T12:40:37.973 回答