Ale*_*dru 11 .net c# windows manifest visual-c++
我找不到太多文档,但最近我不得不运行Windows Server 2012 R2平台就绪测试工具来验证一些MSVC++和C#产品(.exe,服务,库,dll等),我发现了一些错误消息说某些项目清单中没有supportOS设置.
我修复了错误,但我不禁想知道支持的OS设置实际上在幕后做了什么.例如,假设我为所有项目设置了支持的OS设置为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
Run Code Online (Sandbox Code Playgroud)
compatVer 存储在进程内部的某个位置,可能在PEB中。
compatVer 在某些功能中与真实的 Windows 版本进行比较,以启用新功能或更改其行为,以便与应用程序设计的 Windows 版本兼容。MSDN 上的兼容性手册中记录了一些行为更改。
由于受支持的操作系统值是 GUID,因此无法猜测,因此开发人员不能声称支持尚未发布的 Windows 版本。因此,当应用程序在 Windows 7 上运行时,Windows 8 GUID 将不起作用。
存在这样的风险:您的应用程序存在被兼容性行为隐藏的错误,并且可能会通过添加支持的操作系统值来暴露该错误...