Windows 8.1とバージョン番号

| コメント(0) | トラックバック(0)
Windows 8.1ではGetVersionExが6.2と返すらしいというので試してみました。

GetVersionEx function
「Windows 8.1向けと明示(マニフェスト)されていないアプリケーションには6.2と返す」

確かにそうなりました。SupportedOS Idは以下のように。
  • {1f676c76-80e1-4239-95bb-83d0f6d0da78} 8.1/2012 R2
  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 8/2012
  • {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 7/2008 R2
  • {e2011457-1546-43c5-a5fe-008deee3d3f0} Vista/2008

8.1のIdが指定されていると6.3が、ないと6.2が返りました。

過去のマイクロソフトのスタンスとはずいぶん異なる挙動です。Vista/7ぐらいの頃は「特定のバージョンでしか動かないような実装はやめなさい」と言っていたのに。諦めたということでしょうか。

早くからこの方針が決まっていれば、SupportedOS IdがVistaなら(※)6.0、7なら6.1...ということもできたでしょうが、8.1で今さらこうなったのも妙な気はします。

※Vista当時にSupportedOS Idはなかったので、requestedPrivilegesだけがあれば、といったあたり

それとは別に、マニフェストに関わらず判定できるAPIがあり、Version Helper functionsと称されています。

IsWindows8Point1OrGreater他、任意のバージョンかそれ以上を判定できるのですが、VersionHelpers.hの中にコードが書かれており、中でVerifyVersionInfoを呼んでいました。

実体がVerifyVersionInfoですから、IsWindows8Point1OrGreaterなどの各関数のサポートOS欄には"Windows 2000"と書かれています。

とどのつまり、マニフェストのSupportedOS Idをちゃんと記述しておきましょう、という話ですが、Win32の世界で8以降の目新しいAPIって何かあったかな...。

トラックバック(0)

トラックバックURL: https://mychro.mydns.jp/cgi-bin/mt/mt-tb.cgi/444

コメントする

アーカイブ

ウェブページ

Powered by Movable Type 5.2.13

ホームページ