Подтвердить что ты не робот

Как правильно определить операционные системы Windows, Linux и Mac

Я не мог найти что-либо действительно эффективное, чтобы правильно определить, на какой платформе (Windows/Linux/Mac) выполнялась моя С# progrma, особенно на 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;
        }
    }
4b9b3361

Ответ 1

Возможно, проверьте источник IsRunningOnMac в источнике Pinta:

Ответ 2

В соответствии с замечаниями на странице свойств Environment.OSVersion:

Свойство Environment.OSVersion не обеспечивает надежного способа определения точной операционной системы и ее версии. Поэтому мы не рекомендуем использовать этот метод. Вместо этого: Чтобы определить платформу операционной системы, используйте метод RuntimeInformation.IsOSPlatform.

RuntimeInformation.IsOSPlatform работал на то, что мне нужно.

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