web-dev-qa-db-ja.com

C#でOSバージョン/フレンドリ名を取得する

私は現在C#プロジェクトに取り組んでいます。ソフトウェアをよりよく開発するためにユーザー統計を収集したいと思います。 C#のEnvironment.OS機能を使用していますが、OS名がMicrosoft Windows NTのように表示されるだけです。

私ができるようにしたいのはretrieveWindows XP, Windows Vista or Windows 7のようなOSの実際の既知の名前であるや。。など。

これは可能ですか?

25
Boardy

System.Managementの参照とusingステートメントを追加してから、次のようにします。

public static string GetOSFriendlyName()
{
    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;
}
50
George Duckett

ローカルで使用するためにWMIを回避するようにしてください。それは非常に便利ですが、パフォーマンスの点であなたはそれに対して高くつきます。怠惰な税金だと思います!

レジストリに関するKashishの回答は、すべてのシステムで機能するわけではありません。以下のコードには、サービスパックが含まれているはずです。

    public string HKLM_GetString(string path, string key)
    {
        try
        {
            RegistryKey rk = Registry.LocalMachine.OpenSubKey(path);
            if (rk == null) return "";
            return (string)rk.GetValue(key);
        }
        catch { return ""; }
    }

    public string FriendlyName()
    {
        string ProductName = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName");
        string CSDVersion = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CSDVersion");
        if (ProductName != "")
        {
            return (ProductName.StartsWith("Microsoft") ? "" : "Microsoft ") + ProductName +
                        (CSDVersion != "" ? " " + CSDVersion : "");
        }
        return "";
    }
12
domskey

Microsoft.VisualBasicへの.NET参照を追加します。次に電話してください:

new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName

から [〜#〜] msdn [〜#〜]

このプロパティは、Windows Management Instrumentation(WMI)がコンピューターにインストールされている場合、オペレーティングシステム名に関する詳細情報を返します。それ以外の場合、このプロパティはMy.Computer.Info.OSPlatformプロパティと同じ文字列を返します。これは、WMIが提供できるよりも詳細な情報を提供します。WMIが提供できるよりも詳細な情報です。

9
George
String subKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion";
RegistryKey key = Registry.LocalMachine;
RegistryKey skey = key.OpenSubKey(subKey);
Console.WriteLine("OS Name: {0}", skey.GetValue("ProductName"));

これがお役に立てば幸いです

4
Kashish Khanna
System.OperatingSystem osInfo = System.Environment.OSVersion;
3
BentOnCoding
public int OStype()
    {
        int os = 0;
        IEnumerable<string> list64 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\SysWOW64"));
        IEnumerable<string> list32 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\System32"));
        if (list32.Count() > 0)
        {
            os = 32;
            if (list64.Count() > 0)
                os = 64;
        }
        return os;
    }
2