.netを使用してインストール済みのWindows Editionを確認する方法
質問
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;
}
所属していません StackOverflow