操作系统版本随Windows 10 OS 版本递增。 这意味着Windows 10的内部版本号也已更改为 10.0。 同过去一样,在 OS 版本更改后我们将尽力维护应用程序和设备兼容性。 对于大多数应用类别 (没有任何内核依赖项,) 更改不会对应用功能产生负面影响,并且现有应用将继续在Windows 10上正常工作。
表现
此更改的体现特定于应用。 这意味着专门检查 OS 版本的任何应用将获得更高的版本号,这可能会导致出现以下一个或多个情形:
- 应用安装程序可能无法安装应用,并且应用可能无法启动。
- 应用可能会变得不稳定或崩溃。
- 应用可能会生成错误消息,但仍继续正常运行。
某些应用执行版本检查,只向用户传递一条警告。 但有些应用与版本检查紧密相连(在驱动程序中,或在内核模式下,以避免检测)。 在这些情况下,如果找到的版本不正确,应用将失败。 不使用版本检查,我们建议采用以下方法之一:
- 如果应用依赖于特定的 API 功能,请确保找准正确的 API 版本。
- NTDDI (NT 设备驱动程序接口) 版本号仅在 API 中的目标功能发生更改时才递增。 确保通过 APISet 或其他公开的 API(由功能团队创建)检测更改,并且不要将版本用作某些功能或修补程序的代理。 如果存在重大更改,而正常检查未检测到,则表明存在 Bug。
- 确保应用不会以奇怪的方式检查版本,例如通过注册表、文件版本、偏移量、内核模式、驱动程序或其他方式。 如果应用绝对需要检查版本,请使用 GetVersion API,该 API 应返回主要版本号、次要版本号和内部版本号。
- 如果使用 GetVersion API 或其他版本帮助程序函数(如 VerifyVersionInfo),请记住,此 API 的行为自Windows 8.1以来已更改。 有关更多详细信息 ,请参阅 API 文档 。
- 如果你拥有反恶意软件或防火墙等应用,则应通过通常的反馈渠道和 Windows 预览体验计划工作。
应用清单
下面是一个示例应用清单:
<exe>.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
type="win32"
name=SXS_ASSEMBLY_NAME
version=SXS_ASSEMBLY_VERSION
processorArchitecture=SXS_PROCESSOR_ARCHITECTURE
/>
<description> my app exe </description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
* <!-- Windows 10 -->
* <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
将这些变量添加到源:
- SXS_MANIFEST_RESOURCE_ID=1
- SXS_MANIFEST=foo.manifest
- SXS_ASSEMBLY_NAME=Microsoft.Windows.Foo
- SXS_ASSEMBLY_VERSION=1.0
- SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
- SXS_MANIFEST_IN_RESOURCES=1
对于Windows 10,上面标有星号的两行 (*) 显示如何准确定位应用程序的操作系统Windows 10版本。 在早期版本的 Windows 操作系统上运行时,清单Windows 10.exe不会产生任何影响。 如果已定义 .rc 文件,还可以将其添加到 .rc 文件中。 添加 trustInfo 并不重要,但强烈建议这样做。 这将允许你的.exe始终获取正确的版本,无论操作系统是Windows 10还是Windows 8.1。