How to detect properly Windows, Linux & Mac operating systems

c#, cross-platform, macos, mono

Solution

Maybe check out the IsRunningOnMac method in the Pinta source:

Problem

I could not found anything really efficient to detect correctly what platform (Windows / Linux / Mac) my C# progrma was running on, especially on Mac which returns Unix and can't hardly be differenciated with Linux platforms ! So I made something less theoretical, and more practical, based on specificities of Mac. I'm posting the working code as an answer. Please, comment if it works well for you too / can be improved. Thanks ! Response : Here is the working code ! ``` 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; } } ```

Original source