Determine Operating System in .NET Core - Printable Version +- 0Day Forums (https://zeroday.vip) +-- Forum: Coding (https://zeroday.vip/Forum-Coding) +--- Forum: C# (https://zeroday.vip/Forum-C) +--- Thread: Determine Operating System in .NET Core (/Thread-Determine-Operating-System-in-NET-Core) |
Determine Operating System in .NET Core - bontequaggaabcpiqniz - 07-24-2023 How can I determine which operating system my .NET Core app is running on? In the past I could use `Environment.OSVersion`. What is the current way to determine whether my app is running on Mac or Windows? RE: Determine Operating System in .NET Core - contestless945911 - 07-24-2023 `System.Environment.OSVersion.Platform` can be used in full .NET Framework and Mono but: - Mac OS X detection almost never worked for me under Mono - it is not implemented in .NET Core `System.Runtime.InteropServices.RuntimeInformation` can be used in .NET Core but: - it is not implemented in full .NET Framework and Mono - it does not perform platform detection in runtime but **uses hardcoded information instead** (see [corefx issue #3032]( [To see links please register here] ) for more details)You could pinvoke platform specific unmanaged functions such as `uname()` but: - it may cause segmentation fault on unknown platforms - is not allowed in some projects So my suggested solution (see code bellow) may look sily at first but: - it uses 100% managed code - it works in .NET, Mono and .NET Core - it works like a charm so far in [Pkcs11Interop]( [To see links please register here] ) library<!-- language: lang-cs --> string windir = Environment.GetEnvironmentVariable("windir"); if (!string.IsNullOrEmpty(windir) && windir.Contains(@"\") && Directory.Exists(windir)) { _isWindows = true; } else if (File.Exists(@"/proc/sys/kernel/ostype")) { string osType = File.ReadAllText(@"/proc/sys/kernel/ostype"); if (osType.StartsWith("Linux", StringComparison.OrdinalIgnoreCase)) { // Note: Android gets here too _isLinux = true; } else { throw new UnsupportedPlatformException(osType); } } else if (File.Exists(@"/System/Library/CoreServices/SystemVersion.plist")) { // Note: iOS gets here too _isMacOsX = true; } else { throw new UnsupportedPlatformException(); } RE: Determine Operating System in .NET Core - stadtholder707 - 07-24-2023 ## Method System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform() ## Possible Argument OSPlatform.Windows OSPlatform.OSX OSPlatform.Linux ## Example bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(OSPlatform.Windows); ## Update Thanks to the comment by Oleksii Vynnychenko You can get the operating systems name and version as a string using var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription; E.g. `osNameAndVersion` would be `Microsoft Windows 10.0.10586` RE: Determine Operating System in .NET Core - phlebotomeokdkp - 07-24-2023 Check `System.OperatingSystem` class it has static methods for each OS i.e. `IsMacOS()`, `IsWindows()`, `IsIOS()` and so on. These methods are available starting with .NET 5. This makes it a great choice because the implementations for these methods use preprocessor directives to fix the return value to a constant true/false at compilation time for each target OS the `OperatingSystem` class is compiled for. There is no runtime probing or calls to make. Here is an excerpt from one such method in `OperatingSystem`: ```c# /// <summary> /// Indicates whether the current application is running on Linux. /// </summary> [NonVersionable] public static bool IsLinux() => #if TARGET_LINUX && !TARGET_ANDROID true; #else false; #endif |