如何正确检测Windows,Linux& Mac操作系统

时间:2012-04-13 09:03:02

标签: c# macos mono cross-platform

我找不到任何有效的方法来正确检测我的C#progrma运行的平台(Windows / Linux / Mac),特别是在Mac上,它返回Unix并且几乎不能与Linux平台区分开来!

所以我根据Mac的特性做了一些不太理论化,更实用的东西。

我发布了工作代码作为答案。请评论它是否适合您/可以改进。

谢谢!

回复:

这是工作代码!

    public enum Platform
    {
        Windows,
        Linux,
        Mac
    }

    public static Platform RunningPlatform()
    {
        switch (Environment.OSVersion.Platform)
        {
            case PlatformID.Unix:
                // Well, there are chances MacOSX is reported as Unix instead of MacOSX.
                // Instead of platform check, we'll do a feature checks (Mac specific root folders)
                if (Directory.Exists("/Applications")
                    & Directory.Exists("/System")
                    & Directory.Exists("/Users")
                    & Directory.Exists("/Volumes"))
                    return Platform.Mac;
                else
                    return Platform.Linux;

            case PlatformID.MacOSX:
                return Platform.Mac;

            default:
                return Platform.Windows;
        }
    }

2 个答案:

答案 0 :(得分:6)

也许请查看Pinta源中的IsRunningOnMac方法:

答案 1 :(得分:1)

根据Environment.OSVersion Property page上的评论:

  

Environment.OSVersion属性不提供可靠的方法来   确定确切的操作系统及其版本。因此,我们   不建议您使用此方法。相反:确定   操作系统平台,请使用RuntimeInformation.IsOSPlatform   方法。

RuntimeInformation.IsOSPlatform满足了我的需求。

if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    // Your OSX code here.
}
elseif (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    // Your Linux code here.
}