问题很简单。
我正在使用VB.Net开发Windows8.1(+10)应用程序。
并且,我想检测操作系统版本是否为8.1或10.甚至不想知道其他版本,如XP,7和8.
但是,Environment.OsVersion
已被弃用,
无法访问Windows8 APP中的注册表(即使它是可能的政策),
无法生成自定义清单(已阻止)文件以检索版本信息,
无法使用' Kernel32.dll'(政策问题)来提取。
如何在Windows8.1或Windows10 Store应用程序中获取Windows版本?
感谢。
追加:
http://www.codeproject.com/Articles/678606/Part-Overcoming-Windows-s-deprecation-of-GetVe
http://www.vbforums.com/showthread.php?776481-Get-OS-version-Windows-8-1-does-not-detect
唯一的问题是该解决方案是基于C ++还是不适用于Windows 8.1(metro应用程序)。
感谢。
答案 0 :(得分:2)
您应该做的是检查新方法是否可用。如果它们可用,请使用它们,而不管操作系统版本如何。例如:
if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.UI.ViewManagement.ApplicationView", "TryEnterFullScreenMode"))
{
Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
}
答案 1 :(得分:0)
我没有找到任何其他方法来做到这一点,所以这是我的方法。 (它在C#中,但您可以轻松地将其翻译为Visual Basic)
以下属性IsWindows10
检测Windows 8(包括Windows 10移动)设备上是否运行Windows 8.1或Windows Phone 8.1应用程序。
#region IsWindows10
static bool? _isWindows10;
public static bool IsWindows10 => (_isWindows10 ?? (_isWindows10 = getIsWindows10Sync())).Value;
static bool getIsWindows10Sync()
{
bool hasWindows81Property = Windows.ApplicationModel.Package.Current.GetType().GetRuntimeProperties().Any(r => r.Name == "DisplayName");
bool hasWindowsPhone81Property = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().GetType().GetRuntimeProperties().Any(r => r.Name == "RawPixelsPerViewPixel");
bool isWindows10 = hasWindows81Property && hasWindowsPhone81Property;
return isWindows10;
}
#endregion
它是如何运作的?
在Windows 8.1中,Package
类具有DisplayName
属性,Windows Phone 8.1没有该属性。
在Windows Phone 8.1中,DisplayInformation
类具有RawPixelsPerViewPixel
属性,Windows 8.1没有该属性。
Windows 10(包括Mobile)具有这两个属性。这就是我们如何检测应用程序运行的操作系统的方法。