微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

清单的supportedOS设置实际上在幕后做了什么?

我找不到太多的文档,但最近我不得不运行Windows Server 2012 R2平台就绪testing工具来validation一些MSVC ++和C#产品(.exe的,服务,库,DLL等),我碰到一些错误消息受支持的OS设置在某些项目清单中不可用。

我修复了这些错误,但是我不禁想知道在后台实际上supportOS的设置是什么。 例如,假设我将所有项目的受支持的操作系统设置设置为Windows 8.1,那么,如果在Windows 8或Windows 7上运行这些产品,即使已知这些产品在这些操作系统上正常运行,它们是否会启动错误

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

如何将项目添加到窗口的上下文菜单

win10的wpf窗口定位错误

防止subprocess创build可见的窗口?

CoWaitForMultipleHandles API的行为不像logging

在窗体中绘制带有resize点的控件select矩形

Xamarin Studio不能build立一个控制台应用程序

Visual Basic捕获cmd的输出

Windows – 用C#命名pipe道性能build议

我怎样才能从VB6应用程序发送消息到我的C#应用​​程序

Mono在Ubuntu上抛出OutOfMemoryException,而不是OSX或Windows

Windows读取supportedOS值的伪代码可能如下所示:

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将不起作用。

存在一个风险,即您的应用程序具有隐藏兼容性行为的缺陷,并且可能通过添加supportedOS值来暴露。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐