2017-07-29 7 views
0

私はWindows用に作成したアプリがあります:PC /タブレット8.1、モバイル/携帯電話8.1、UWP 10。Windowsアプリケーション(UWP/PC /タブレット8.1 /モバイル8.x)のオペレーティングシステム(OS)を確認する方法?

これはC#を使用したWinRTアプリです。

アプリに広告バナーを配置するには、オペレーティングシステムごとに個別の広告ユニットIDを作成する必要があります。

現在、どのオペレーティングシステムが使用されているかを判断する方法はありますか?

コードを使用することによって使用されているデバイスをチェックすることが可能である:オペレーティングシステムがWindows 8.1またはWindows 10であるかどうかを知る方法

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

しかし?

UPDATE:

私はC#/ XAMLのためのOSのバージョンを得ることについて興味深い記事に出くわしています:

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

それはWindows.SystemかどうかをチェックするためにSystem.Type.GetTypeを使用しています。 Profile.AnalyticsVersionInfoはnullを返します。

コードを修正してテストしましたが、Visual Studioエミュレータとシミュレータで動作するようです。私はWindows 10コンピュータを使用しているので、Windows 8.1コンピュータをテストすることはできませんが、Windows Phone 8.1およびWindows Mobileの場合は正確でした。私は実際の電話機でテストしていません。

したがって、Windows 10でのみ利用可能なAnalyticsVersionInfoのタイプを確認すると、OSによってtrueまたはfalseが返されるようです。

リリースバージョンで使用するには、次のコードを使用することをおすすめしますか?

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

UPDATE:

ワンライナー:

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

答えて

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()); 
    } 
} 
+0

この.NETコードは、WinRTアプリケーションでは機能しません。また、「重要」と書かれているページの最初の発言は、「このプロパティの値を取得してオペレーティングシステムのバージョンを判断することはお勧めしません」ということです。 – theMaxx

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; 
} 
+0

それは幾分危険で複雑に思えます。もっと簡単な方法はありますか? – theMaxx

+0

なぜ危険ですか?特定のタイプのアクティベーション・ファクトリがシステムに存在するかどうかをチェックするだけです。あなたのType.GetType()アプローチの方が同じ最終結果のためにもっと働きます。そしてこれはずっと速いです。 – Sunius

+0

ワンライナーはいかがですか? var isWindows10 = Type.GetType( "Windows.System.Profile.AnalyticsVersionInfo、Windows、ContentType = WindowsRuntime")!= null?正誤; 約12行のコードを保存し、ファイルをインポートしたり、アクティベーションファクトリを実行したりする必要はありません。 これが実際にすべてのシナリオで有効な解決策であるかどうかはまだ分かりません。 – theMaxx

関連する問題