gpt4 book ai didi

c# - list 的 supportedOS 设置在幕后实际上做了什么?

转载 作者:可可西里 更新时间:2023-11-01 12:40:15 25 4
gpt4 key购买 nike

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

我修复了错误,但我不禁想知道 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 版本兼容。 compatibility cookbook 中记录了一些行为更改在 MSDN 上。

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

您的应用程序存在被兼容性行为隐藏的错误的风险,并且可能会通过添加受支持的操作系统值来暴露...

关于c# - list 的 supportedOS 设置在幕后实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com