我找不到太多的文档,但最近我不得不运行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] 举报,一经查实,本站将立刻删除。