如何确定Windows应用程序(UWP / PC / Tablet 8.1 / Mobile 8.x)的操作系统(OS)?

时间:2017-07-29 21:03:45

标签: c# windows-runtime operating-system

我有一个我为Windows创建的应用程序:PC / Tablet 8.1,Mobile / Phone 8.1和UWP 10.

这是一个使用C#的WinRT应用程序。

要在应用中放置广告横幅,需要为每个操作系统制作单独的广告单元ID。

有没有办法确定当前使用的操作系统?

可以使用以下代码检查正在使用的设备:

#if WINDOWS_PHONE_APP
isWindowsPhoneApp = true;
#else
isWindowsPhoneApp = false;
#endif

但如何知道操作系统是Windows 8.1还是Windows 10?

更新:

我遇到了一篇关于获取C#/ XAML操作系统版本的有趣文章:

Windows Store Apps: Get OS Version, beginners tutorials (C#-XAML)

它使用System.Type.GetType检查Windows.System.Profile.AnalyticsVersionInfo是否返回null。

我修改并测试了代码,它似乎可以在Visual Studio模拟器和模拟器中工作。我无法测试Windows 8.1计算机,因为我使用的是Windows 10计算机,但对于Windows Phone 8.1和Windows 10 Mobile,它是准确的。我还没有在实际的手机设备上测试它。

因此,检查仅在Windows 10中可用的AnalyticsVersionInfo类型将返回true或false,具体取决于操作系统。

那么建议在发布版本中使用以下代码吗?

var analyticsVersionInfoType = Type.GetType("Windows.System.Profile.AnalyticsVersionInfo, Windows, ContentType=WindowsRuntime");
var isWindows10 = analyticsVersionInfoType != null;
displayTextBlock.Text = "Is Windows 10: " + isWindows10;

更新:

一衬垫:

var isWindows10 = Type.GetType("Windows.System.Profile.AnalyticsVersionInfo, Windows, ContentType=WindowsRuntime") != null;

3 个答案:

答案 0 :(得分:0)

试试这个,我在https://msdn.microsoft.com/en-us/library/system.environment.osversion(v=vs.110).aspx

找到了它
using System;

class Sample 
{
    public static void Main() 
    {
        Console.WriteLine();
        Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());
    }
}

答案 1 :(得分:0)

您只需检查系统中是否存在仅在Windows 10中添加的类。

[DllImport("API-MS-WIN-CORE-WINRT-L1-1-0.DLL")]
private static extern int/* HRESULT */ RoGetActivationFactory([MarshalAs(UnmanagedType.HString)]string typeName, [MarshalAs(UnmanagedType.LPStruct)] Guid factoryIID, out IntPtr factory);

static bool IsWindows10()
{
    IntPtr factory;
    var IID_IActivationFactory = new Guid(0x00000035, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
    var hr = RoGetActivationFactory("Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession", IID_IActivationFactory, out factory);
    if (hr < 0)
        return false;

    Marshal.Release(factory);
    return true;
}

答案 2 :(得分:0)

switch (Environment.OSVersion.Platform)
{
    case PlatformID.Unix:
    //do android stuff
    break;

    case PlatformID.MacOSX:
    //do apple stuff
    break;

    case PlatformID.Win32NT:
    //do windows NT stuff
    break;

    case PlatformID.Win32Windows:
    //do windows 95 and 98 stuff
    break;
}