什么是清单';支持的操作系统设置实际上是在幕后进行的

本文关键字:实际上 设置 操作系统 什么 支持 | 更新日期: 2023-09-27 17:57:44

我找不到太多文档,但最近我不得不运行Windows Server 2012 R2平台就绪测试工具来验证一些MSVC++和C#产品(.exe、服务、库、dll等),我遇到了一些错误消息,说supportedOS设置在某些项目清单中不可用。

我修复了错误,但我忍不住想知道受支持的操作系统设置在幕后到底做了什么。例如,假设我为所有项目都将supportedOS设置为Windows 8.1,如果在Windows 8或Windows 7上运行这些产品,即使已知它们在这些操作系统上确实有效,这会不会开始引发错误?

我在supportedOS上能找到的最多的东西是这样的:http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074(v=vs.85).aspx

什么是清单';支持的操作系统设置实际上是在幕后进行的

Windows读取支持的操作系统值的伪代码可能如下所示:

double compatVer = 4.0; // Win95
if (hasW10guid && _WIN_VER >= 0xa00)
  compatVer = 10.0;
else if (hasW81guid && _WIN_VER >= 0x603)
  compatVer = 6.3;
else if (hasW8guid && _WIN_VER >= 0x602)
  compatVer = 6.2;
else if (hasW7guid && _WIN_VER >= 0x601)
  compatVer = 6.1;
else if (hasWVistaguid && _WIN_VER >= 0x601)
  compatVer = 6.0; // Application wants Vista compatibility on Win7+
else if (hasRequestedExecutionLevel)
  compatVer = 6.0; // UAC compatible

compatVer存储在进程内部的某个位置,可能存储在PEB中。

compatVer在某些功能中与真实的Windows版本进行比较,以启用新功能或更改其行为,从而与应用程序设计的Windows版本兼容。MSDN上的兼容性食谱中记录了一些行为更改。

由于supportedOS值是GUID,因此无法猜测,因此开发人员无法声称支持尚未发布的Windows版本。因此,当应用程序在Windows 7上运行时,Windows 8 GUID将不起作用。

您的应用程序有一个被兼容性行为隐藏的错误的风险,它可能会通过添加受支持的OS值而暴露出来。。。