.netを使用してインストール済みのWindows Editionを確認する方法

StackOverflow https://stackoverflow.com/questions/1636711

  •  06-07-2019
  •  | 
  •  

質問

System.Environment.OSVersionは、インストールされているWindows 2003のエディション(Standard、Enterprise、DataCenter)を示すようには見えません。

マネージコードのみを使用してこの情報にアクセスする方法はありますか?

P / Invokeを使用してGetVersionExを呼び出し、OSVERSIONINFOEX.wSuiteMaskを調べてこの情報を取得できることは知っていますが、より簡単な解決策を探しています。

更新

WMIを使用する方法は、Win32_OperatingSystemのOSProductSuiteプロパティの方がNameプロパティよりも信頼性が高いように見えますが、行く方法のように見えます。サンプルコードは次のとおりです。

ManagementScope scope = new ManagementScope();
ObjectQuery query = new ObjectQuery("SELECT name, csdversion, description, OperatingSystemSKU, OSProductSuite FROM Win32_OperatingSystem");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
    using (ManagementObjectCollection resultCollection = searcher.Get())
    {
        foreach (ManagementObject result in resultCollection)
        {
            foreach (PropertyData propertyData in result.Properties)
            {
                Debug.WriteLine(
                    propertyData.Name + ": " +
                    ((propertyData.Value == null) ? "" : propertyData.Value.ToString())
                    );
            }
        }
    }
}
役に立ちましたか?

解決

次のWMIクエリを実行できます。

Win32_OperatingSystemから名前を選択

次のようなものが返されます:

Microsoft Windows Server 2003 Standard Edition | C:\ WINDOWS | \ Device \ Harddisk0 \ Partition1

この記事では、.NETを使用してWMIクエリを実行する方法を説明しています。

他のヒント

マネージコードのみを使用してこれを行う方法を知りません。

こちらのコードがあります GetVersionEx を使用して、物事をカプセル化する必要がありますうまくいきました。

必要な人のために小さなコードスニペットを追加したかっただけです。

    private static string GetOSName()
    {
        string result = string.Empty;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
        foreach (ManagementObject os in searcher.Get())
        {
            result = os["Caption"].ToString();
            break;
        }
        return result;
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top