Windows 8.1 プレビューでは、Environment.OSVersion.Version は Windows 8 と同じバージョン番号を返します。Windows 8.1 を検出する別の方法はありますか。
4 に答える
この記事を見てください:
Windows 8.1 Preview でのオペレーティング システムのバージョンの変更
GetVersion(Ex)
API は廃止されました。つまり、API を呼び出すことはできますが、アプリが特に Windows 8.1 プレビューを対象としていない場合、Windows 8 のバージョン管理 (6.2.0.0) が取得されます。
GetVersion
マニフェストで明示的に 8.1 を指示しない限り、実際の OS バージョンについて嘘をつくということです。
アプリ マニフェストに次を追加する必要があります。
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
* <!-- Windows 8.1 -->
* <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- 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}"/>
</application>
</compatibility>
そうしたくない場合は、次のレジストリ キーを確認できます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
現在のバージョンでは 6.3 が提供されます
現在のビルド番号は 9431 になります
を使用しntdll!RtlGetVersion
ます。これは と の両方が使用するものGetVersionEx
でVerifyVersionInfo
あり、正しいバージョン番号を示します。OSVersionInfoExW
と同様に、構造体へのポインタを取りますGetVersionExW
。成功した場合はSTATUS_SUCCESS
(0) を返します。
ここまで深く掘り下げたいと思うかどうかはわかりませんが、以下で説明する単純な WMI クエリ呼び出しによって正確なオペレーティング システムのバージョンを簡単に取得できる可能性があります。正確なオペレーティング システムのバージョンを取得するために、コードに直接プラグインできる方法について言及しました。この C# コード スニペットにインポートする必要がある名前空間は、関数のすぐ上に記載されています。
using System;
using System.Management;
private string GetOsVersion()
{
var sccmManagementScope = new ManagementScope(@"\\" + System.Environment.MachineName + @"\root\cimv2");
var searchResult = new ManagementObjectSearcher(sccmManagementScope, new WqlObjectQuery("SELECT Version FROM Win32_OperatingSystem"));
var resultSet = searchResult.Get();
var osVersion = string.Empty;
foreach (ManagementObject managementObject in resultSet)
{
osVersion = Convert.ToString(managementObject["Version"]);
}
return osVersion;
}
System.Environment.OSVersion.Version
Windows 8.1 のターゲットに関して非常に具体的なことがない限り、ほとんどのニーズを満たすことができるはずだと私は強く信じています。System.Environment
実際、アプリケーションが Windows 8.1 オペレーティング システム用にマニフェストされていない場合、class は実際には OS のバージョンに関するものであるため、要件の 1 つに同じトリックを使用しました。