我目前正在与一些应用程序兼容设置 , 特别是一些垫片 ,并研究应用程序清单的compatibilty
部分 。
除了细节外,有一件事让我觉得奇怪,就是即使在Visual Studio 2015中,应用程序兼容性mainfest(*)也没有任何缺省 – 或者说,default是none,因此默认为“Windows Vista“wrt。 应用程序清单中列出的东西。
这对我来说似乎很奇怪,但也许我错过了一些东西:
Visual C ++ / Native或C#中的每个新应用程序都是Windows Vista兼容模式下运行的,这些应用程序是由任何不知道这些东西的团队新创build的(而且我敢说这里有很多这样的团队)。 这是真的吗? 有这个理由吗?
(*):
... <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{...}"/>
而当我在这里: 良好的概述
compatibility
符号列表 是的,在Visual Studio 2015中新创建的项目(我只验证.NET项目,没有本地C ++)将没有compatibility
部分,并且将在Windows Vista上下文中运行,正如您所说的。 很容易检查。 如果您创建了新的控制台(例如)项目并转到项目属性 – >应用程序,您将在清单部分看到默认情况下显示以下内容:“使用默认设置嵌入清单”。 这是什么默认设置显示? 构建控制台项目,并查看任何资源查看器,你会发现:
<?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" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
如您所见,没有兼容性部分。 然后运行该控制台项目(把Console.ReadKey()
为它不立即退出)。 打开资源监视器( resmon
),进入CPU部分并添加“操作系统上下文”列。 您将在该列中看到“Windows Vista”,以供您全新的控制台应用程序使用,因此它可以在Windows Vista环境下运行。
至于理由 – 我只能对此做出假设,这是一个。 兼容性部分的目标是:
本节帮助Windows确定应用程序旨在针对的Windows版本
当您在Visual Studio中创建新项目时,不知道它是否被设计(这意味着在特定版本的Windows上进行测试),并知道在更高版本的Windows中引入了行为更改 – 因此采取了一种安全的方法来默认行为这在所有版本的Windows上都是一样的(从Vista开始) – 与在不同版本的Windows上不同的行为的默认行为相反。 对于不同的行为,您(理想情况下)应该在您支持的所有Windows版本上测试您的应用程序。 当行为是相同的 – 你可以测试任何一个版本。
因此,对于那些不知道这些行为改变的开发人员提供相同的行为是合理的 – 他们选择的Windows版本上测试的应用程序将很乐意在其他版本上运行(关于与提及的兼容性部分相关的功能)。