Files
ReLibreHardwareMonitor/Software/OperatingSystem.cs
T
Nicholas Seckar 9a1088e537 Fix 64bit detection, broken since 66e69c4c25. (#34)
This commit restores the previous logic of accepting an 8-byte intptr as evidence
enough for 64bit. It also accepts presence of IsWow64Process as evidence of 64bit.
On 64bit, this may return true or false depending on the process. On 32bit this entry
point is not available and an exception will be raised.
2018-03-28 09:51:21 +02:00

37 lines
1.2 KiB
C#

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace OpenHardwareMonitor.Software {
public static class OperatingSystem {
static OperatingSystem() {
// The operating system doesn't change during execution so let's query it just one time.
var platform = Environment.OSVersion.Platform;
IsLinux = platform == PlatformID.Unix || platform == PlatformID.MacOSX;
if (IntPtr.Size == 8) {
Is64Bit = true;
} else if (!IsLinux) {
try {
var result = IsWow64Process(Process.GetCurrentProcess().Handle, out bool wow64Process);
// If we are still here, this is a 64bit windows; 32bit windows does
// not provide IsWow64Process.
Is64Bit = true;
}
catch (EntryPointNotFoundException) {
// IsWow64Process is not present on 32 bit:
Is64Bit = false;
}
}
}
public static bool Is64Bit { get; }
public static bool IsLinux { get; }
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);
}
}