secretbase.log

.NET/C#/Pythonなど

Windows 10 と Windows 8.1 を判定する

動作しているOSのバージョンを取得して判定する必要があり、 Environment.OSVersion を用いて Major と Minorで判定するようにサンプルコードを動作させてみました。

しかし、Windows 10 でも Windows 8.1 でも Major が 6 のまま。

Windows 10 では majorは 10 のはず...。

サンプル

static void Main(string[] args)
{
    var os = Environment.OSVersion;

    Console.WriteLine("Version Information:");
    Console.WriteLine("   Major: {0}", os.Version.Major);
    Console.WriteLine("   Minor: {0}", os.Version.Minor);
}

解決策

過去の互換性を保つために、OSVersionはWindows8のバージョンを返す仕様のようです。

マニフェストファイルでサポートOSを明示することで回避できます。

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- このアプリケーションがテストされ、協働するようテストされた Windows バージョンの
           一覧。適切な要素をコメント解除すると、最も互換性のある環境を Windows が
           自動的に選択します。-->

      <!-- 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>

実行結果

Version Information:
   Major: 10
   Minor: 0

参考

C#逆引きレシピ

C#逆引きレシピ