How to detect properly Windows, Linux & Mac operating systems
Solution 1
Maybe check out the IsRunningOnMac method in the Pinta source:
Solution 2
Per the remarks on the Environment.OSVersion Property page:
The Environment.OSVersion property does not provide a reliable way to identify the exact operating system and its version. Therefore, we do not recommend that you use this method. Instead: To identify the operating system platform, use the RuntimeInformation.IsOSPlatform method.
RuntimeInformation.IsOSPlatform worked for what I needed.
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
// Your OSX code here.
}
elseif (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
// Your Linux code here.
}
OlivierB
Updated on June 11, 2022Comments
-
OlivierB almost 2 years
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; } }
-
OlivierB about 12 yearsThanks, it seems to use p/invoke. Will it work every time or are there chances mono complains about that ?