Windows 10 将被捕获为 Windows 8 / Windows 8.1
Windows 10 will catched as Windows 8 / Windows 8.1
我有一个 returns OS 版本的程序。
如果 运行 在 Windows 10
上,它会将其检测为 Windows 8|8.1
。
public string GetWindwosClientVersion() //Get OS Version and if 64 or 32 bit
{
int major = System.Environment.OSVersion.Version.Major;
int minor = System.Environment.OSVersion.Version.Minor;
int build = System.Environment.OSVersion.Version.Build;
string bit;
if (System.Environment.Is64BitOperatingSystem == true) //get 64 or 32 bit
{
bit = " 64bit";
}
else
{
bit = " 32bit";
}
if (major == 4 && minor == 0 && build == 950)
return "Win95 Release 1" + bit;
else if (major == 4 && minor == 0 && build == 1111)
return "Win95 Release 2" + bit;
else if (major == 4 && minor == 3 && (build == 1212 || build == 1213 || build == 1214))
return "Win95 Release 2.1" + bit;
else if (major == 4 && minor == 10 && build == 1998)
return "Win98" + bit;
else if (major == 4 && minor == 10 && build == 2222)
return "Win98 Second Edition" + bit;
else if (major == 4 && minor == 90)
return "WinMe" + bit;
else if (major == 5 && minor == 0)
return "Win2000" + bit;
else if (major == 5 && minor == 1 && build == 2600)
return "WinXP" + bit;
else if (major == 6 && minor == 0)
return "Vista" + bit;
else if (major == 6 && minor == 1)
return "Win7" + bit;
else if (major == 6 && minor == 2 && build == 9200)
return "Win8 | Win8.1" + bit;
else if (major == 6 && minor == 2 && build == 9600)
return "Win8.1 Update 1" + bit;
else if (major == 10 && minor == 0 && build == 10240)
return "Win10" + bit;
else
return "Can not find OS version.";
}
在其他代码中我看到 Windows 10 应该是 major == 10
但它似乎是 major == 6 && minor == 2 && build == 9200
。
使用 Windows 7 它工作正常。
因为我没有使用VS 2015,无法将客户端更新到Windows 8.1 SDK
,所以老问题中的IsWindows10OrGreater
解决方案对我不起作用!
我不记得该页面,但据我所知,Windows 10 返回 603 的 VersionNT 与 Windows 8 相同...基本上 Win 10 认为它的 Win 8 .
所以在你的条件语句中 Windows 10 被捕获为 Windows 8 只是因为它在语句的末尾。这是微软的解决方案:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241(v=vs.85).aspx
要检测您 运行 在 Windows 10 上,您需要 add a manifest file 到您的项目并根据需要插入这些兼容性标签:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- List of all Windows versions this app is compatible with -->
<!-- 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}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
如果您不通过清单声明您的应用与 Windows 10 兼容,框架将始终假装您 运行 在 Windows 8.1 上。几周前我们遇到了同样的问题,并通过添加包含这些兼容性标签的清单解决了这个问题。
我有一个 returns OS 版本的程序。
如果 运行 在 Windows 10
上,它会将其检测为 Windows 8|8.1
。
public string GetWindwosClientVersion() //Get OS Version and if 64 or 32 bit
{
int major = System.Environment.OSVersion.Version.Major;
int minor = System.Environment.OSVersion.Version.Minor;
int build = System.Environment.OSVersion.Version.Build;
string bit;
if (System.Environment.Is64BitOperatingSystem == true) //get 64 or 32 bit
{
bit = " 64bit";
}
else
{
bit = " 32bit";
}
if (major == 4 && minor == 0 && build == 950)
return "Win95 Release 1" + bit;
else if (major == 4 && minor == 0 && build == 1111)
return "Win95 Release 2" + bit;
else if (major == 4 && minor == 3 && (build == 1212 || build == 1213 || build == 1214))
return "Win95 Release 2.1" + bit;
else if (major == 4 && minor == 10 && build == 1998)
return "Win98" + bit;
else if (major == 4 && minor == 10 && build == 2222)
return "Win98 Second Edition" + bit;
else if (major == 4 && minor == 90)
return "WinMe" + bit;
else if (major == 5 && minor == 0)
return "Win2000" + bit;
else if (major == 5 && minor == 1 && build == 2600)
return "WinXP" + bit;
else if (major == 6 && minor == 0)
return "Vista" + bit;
else if (major == 6 && minor == 1)
return "Win7" + bit;
else if (major == 6 && minor == 2 && build == 9200)
return "Win8 | Win8.1" + bit;
else if (major == 6 && minor == 2 && build == 9600)
return "Win8.1 Update 1" + bit;
else if (major == 10 && minor == 0 && build == 10240)
return "Win10" + bit;
else
return "Can not find OS version.";
}
在其他代码中我看到 Windows 10 应该是 major == 10
但它似乎是 major == 6 && minor == 2 && build == 9200
。
使用 Windows 7 它工作正常。
因为我没有使用VS 2015,无法将客户端更新到Windows 8.1 SDK
,所以老问题中的IsWindows10OrGreater
解决方案对我不起作用!
我不记得该页面,但据我所知,Windows 10 返回 603 的 VersionNT 与 Windows 8 相同...基本上 Win 10 认为它的 Win 8 .
所以在你的条件语句中 Windows 10 被捕获为 Windows 8 只是因为它在语句的末尾。这是微软的解决方案:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241(v=vs.85).aspx
要检测您 运行 在 Windows 10 上,您需要 add a manifest file 到您的项目并根据需要插入这些兼容性标签:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- List of all Windows versions this app is compatible with -->
<!-- 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}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
如果您不通过清单声明您的应用与 Windows 10 兼容,框架将始终假装您 运行 在 Windows 8.1 上。几周前我们遇到了同样的问题,并通过添加包含这些兼容性标签的清单解决了这个问题。