在WinRT,Windows8(10)应用程序中获取Windows版本

时间:2015-10-06 10:50:20

标签: vb.net windows windows-runtime windows-8.1 windows-10

问题很简单。

我正在使用VB.Net开发Windows8.1(+10)应用程序。

并且,我想检测操作系统版本是否为8.1或10.甚至不想知道其他版本,如XP,7和8.

但是,Environment.OsVersion已被弃用,

无法访问Windows8 APP中的注册表(即使它是可能的政策),

无法生成自定义清单(已阻止)文件以检索版本信息,

无法使用' Kernel32.dll'(政策问题)来提取。

如何在Windows8.1或Windows10 Store应用程序中获取Windows版本?

感谢。

追加:

  1. 我想检索Windows版本(无论是8.1还是10)
  2. 对于操作Live Tile非常重要。
  3. 不改变批评行为或评论中提到的内容。 Windows Metro应用程序提供了与开始菜单中的图块拼贴略有不同的方法,这在不知道Windows版本的情况下处理非常烦人。无论如何,这不是主题。
  4. VB.Net或C#代码将非常感激。 这不是给我工作代码'事情。
  5. 这个问题不仅仅在我身上, 它也是其他网站上的持续主题:
  6. 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应用程序)。

    感谢。

2 个答案:

答案 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)具有这两个属性。这就是我们如何检测应用程序运行的操作系统的方法。