ASCII.jp Windows上から今動いているのがWindows 11なのか10なのかを確認したが、答えはバラバラ

ASCII.jp Windows上から今動いているのがWindows 11なのか10なのかを確認したが、答えはバラバラ

  • 沿って huawei
  • 13/01/2023

Androidアプリ実行環境のプレビューや品質アップデートでの問題修正とWindows 11の話題が続く

Windows 11でのAndroidアプリ実行環境のプレビューや品質アップデート、さらには、Windows 10 Ver.21H2のリリースなど、Windows関連でニュースがたて込んでいる。もっともWindows 11のリリース直後でもあり、いろいろと話題になるタイミングなのだろう。

さて、Windows 11のAndroidアプリの実行環境だが、現在のところ米国内のみでのプレビューで、AmazonのアプリストアがIPアドレスで地域をチェックしているらしく、Amazon.comのアカウントを入れただけでは拒否された。というわけで、今回はアクセスできなかった画面で許していただきたい。

Windows 11のベータ版でAndroidアプリを試そうと思ったが、肝心のAmazon appstoreが日本国内では動作しないようだ

また、22日(現地時間)になって、Windows 10 Ver.21H2が完成と発表され、ブログ記事には19044.1288が完成版という話で、ISOイメージも公開された。

筆者のマシンの1台にもWindows Updateで通知が来たので、アップデートしてみたら、インストールされたのはビルド19044.1319だった。しかもこのビルド、10月19日に配信が開始されている。番号が大きい方が新しいとすれば、最新版は、ビルド19044.1319のはず。なのにブログ記事の19044.1288ってどういうことなのか? しかも、Windows 10 Ver.2004~21H1には、それぞれ19041.1288、19042.1288、19043.1288が10月12日に配付されている(https://docs.microsoft.com/ja-jp/windows/release-health/release-information)。

とりあえず、Windows Insider ProgramのBeta Channelに加入しているなら、ISOは入れないで、Windows Update経由でアップデートしたほうがいいかもしれない。時間かけてISOイメージをダウンロードして損した気分である。

今動いているのはWindows 10なのか11なのか?

WindowsのアップデートがあるたびにWindowsのバージョンや名称を調べる方法を検証している。筆者は複数のマシンを持っており、それぞれバージョンが違うし、エディションも違う。バージョンアップの検証をするのに対象のマシンを間違えてはマズい。しかし、Windowsのバージョンを調べる方法は、段々面倒になってきている。というのも、ソフトウェアの互換性が高まり、バージョン番号では互換性の判断をしにくくなってきたことがある。

Windowsが自分のバージョンをAPI経由で通知できるようにしている大きな理由の1つは、アプリケーションがWindowsに必要な機能があるかどうかを判断できるようにするためだ。しかし、逆にバージョンチェックがアダになって、アップデートのあとにアプリケーションが動かなくなることがあった。このため、昔のWindowsにはMS-DOSアプリにウソのバージョン番号を教えるためのsetverコマンドまで用意された。

またWindows 95からは、ユーザーに見えるWindowsの名称とOSのバージョンが別になった。しかも当時は32bitアプリケーションが動作する環境にはNT系と95系の2つがあり、「Windowsのバージョン」は混乱し始めた。アプリケーションがWindowsの機能を使うために呼び出すAPI(Application Programming Interface)というレベルでは、さらなる混乱があった。たとえば、動画を再生する機能はWindowsのバージョンだけでなく、インストールされているWindows Media Playerのバージョンに依存していた。

というわけで、MicrosoftはWindows 8でバージョンチェックを大きく変更した。これまでのバージョン番号を得るAPIを非推奨として、「バージョンヘルパー」というAPIを用意した。これは、Windowsのリリース(Windows XPとかWindows 7とか)よりも後のバージョンなのかどうかを判定するものだ。

これを使えば、XPやVistaには対応せず、Windows 7/8用に作ったというアプリは判定が容易になり、かつ、その後登場したWindows 10でもバージョンを間違えることがない。そして、従来のバージョン番号を得るためのAPIは、開発時に指定する対応バージョンによって、適当なバージョンを返すようになった。

ASCII.jp Windows上から今動いているのがWindows 11なのか10なのかを確認したが、答えはバラバラ

たとえば、Windows 8対応として開発されコンパイルされたアプリケーションがバージョン番号を得ようとすると、Windows 10で動いていてもWindows 8のバージョン番号(Ver.6.2)を教えるようになった。こうすることで、Version~6.2という形でしかバージョンをチェックしていないアプリケーションもWindows 10で動くようになる(もしVersionが10だとしたらVersion=6.2は成立しない)。

しかし、アプリケーション開発者ではなく、システム管理者的な視点でのバージョンチェックとは、「どのバージョンのWindowsがマシンにインストールされているのか?」という点なのであり、だからちゃんと「Windows 11」と報告してほしい。

さて、Windowsのバージョンをチェックする方法はいくつかある。まず、GUIで見るなら、WinVer.exeとシステム情報(MSinfo32.exe)がある。

Windowsの定番バージョン表示アプリであるWinVer.exe。これはちゃんとWindows 11だと報告してくれる

また、C:\Windows\System32\ntoskrnl.exeのプロパティを見るという方法もある。

ntoskrnl.exeは、Windowsのカーネルに相当するものだが、そのプロパティを見ると10.0.22000.282とバージョンを報告する

これらからわかるのは、大きく2つのバージョン表記方法がある点だ。1つは、WinVer.exeのように製品名とバージョン、ビルド番号などを併記するもの。もう1つは、単にビルド番号含むバージョン番号だけを表示するものだ。

これを見ると、Windows 11のバージョンは、「Ver.21H2 OSビルド2200.282」または「10.0.22000.282」となっている。Windows 11と言っておきながら、バージョン番号の先頭は、Windows 10と同じなのだ。いやはや。

Windows 10 Ver.21H2では、「Ver.21H2 OSビルド 19044.1319」あるいは、「10.0.19041.1319」となる。こちらも番号表記だと、先頭は「10」になっている。後半のビルド番号に相当する部分がWindows 11とは異なるため、区別はつくのだが、バージョン番号の意味からすると、Windows 11とWindows 10にはほとんど「差」がないことになる。

Windows 10は、Ver.2004(ビルド番号は19041)から内部的なバージョンは19041のままで、19042~19043はたぶん区別のために付けた番号なので、ベースとなったビルドは同一のまま「19041」なのだと思われる。

では、コマンドラインでのバージョン表示はどうだろうか? コマンドラインから可能なバージョン表示には6つの方法がある。

方法PowerShellでのコマンドライン
PowerShellコマンドレット(Get-ComputerInfo).WindowsProductName
レジストリreg.exe query "HKLM\Software\Microsoft\windows NT\Currentversion" /v ProductName
CIMGet-CimInstance Win32_OperatingSystem | select caption
Win32コマンドsysteminfo | select-string "OS 名"
.NET Frameworkクラス[System.Environment]::OSversion
cmd.exe内部コマンドcmd.exe /c ver

このうち、「Get-ComputerInfo」「レジストリ」は、名称として「Windows 10」を報告した。

コマンドラインで6つの方法でWindows 11のバージョンを調べて見た。Windows 10と報告するものもあれば、正しくWindows 11と報告するものがある

これに対してCIMクラス「Win32_OperationgSystem」「systeminfo.exe」コマンドは、Windows 11を報告する。cmd.exeのVERコマンド、.NET Frameworkの「System.Environment.OSVersion」は、「10.0.22000」というバージョン番号を報告し、Windows 10なのか11なのかは報告しない。

これだけを見ると、マシンがWindows 10なのか11なのかは「賛否両論」という感じである。 もっともこれは、Windows 10からアップグレードした場合なので、もしかして、Windows 11のプリインストールマシンなら違った結果になったかもしれない(はい、まだ買ってません)。

現状、GUIで確認するならWinVer.exeだが、ネットワーク経由で、他のマシンに接続して、コマンドラインで作業中にバージョンを確認したいときにはSysteminfo.exeを使い、リモートから確認したい場合には、CIMのWin32_OperationgSystemを使うのがよさそうだ。

前へ12次へ

ASCII倶楽部とは