13

Windows 8.1 プレビューでは、Environment.OSVersion.Version は Windows 8 と同じバージョン番号を返します。Windows 8.1 を検出する別の方法はありますか。

4

4 に答える 4

24

この記事を見てください:

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 になります

于 2013-07-01T14:32:04.480 に答える
6

を使用しntdll!RtlGetVersionます。これは と の両方が使用するものGetVersionExVerifyVersionInfoあり、正しいバージョン番号を示します。OSVersionInfoExWと同様に、構造体へのポインタを取りますGetVersionExW。成功した場合はSTATUS_SUCCESS(0) を返します。

于 2013-11-16T15:31:01.127 に答える
2

ここまで深く掘り下げたいと思うかどうかはわかりませんが、以下で説明する単純な 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.VersionWindows 8.1 のターゲットに関して非常に具体的なことがない限り、ほとんどのニーズを満たすことができるはずだと私は強く信じています。System.Environment実際、アプリケーションが Windows 8.1 オペレーティング システム用にマニフェストされていない場合、class は実際には OS のバージョンに関するものであるため、要件の 1 つに同じトリックを使用しました。

于 2014-08-20T05:54:22.790 に答える