static void Main(string[] args) { // Calling RtlGetVersion in ntdll.dll // The Windows Kernel offers an interesting function. The RtlGetVersion routine returns version information about the // currently running operating system. It is available starting with Windows 2000 and also works on // Windows 10 / Server 2019 / Server 2016 right away. Console.WriteLine($"Windows version: " + $"{OSVersion.GetOSVersion().Version.Major}." + $"{OSVersion.GetOSVersion().Version.Minor}." + $"{OSVersion.GetOSVersion().Version.Build}" + $""); Console.WriteLine($"OS type: {OSVersion.GetOperatingSystem()}"); Console.WriteLine($"is workstation: {OSVersion.IsWorkstation}"); Console.WriteLine($"is server: {OSVersion.IsServer}"); Console.WriteLine($"64-Bit OS: {OSVersion.Is64BitOperatingSystem}"); if (OSVersion.GetOSVersion().Version.Major >= 10) { Console.WriteLine($"Windows Release ID: {OSVersion.MajorVersion10Properties().ReleaseId ?? "(Unable to detect)"}"); Console.WriteLine($"Windows Display Version: {OSVersion.MajorVersion10Properties().DisplayVersion ?? "(Unable to detect)"}"); Console.WriteLine($"Windows Update Build Revision: {OSVersion.MajorVersion10Properties().UBR ?? "(Unable to detect)"}"); } Console.ReadKey(); }
public void UnknownWindowsWhenVersionHasZeroValues(int majorVersion, int minorVersion) { // arrange var osVersionInfoMock = new OSVERSIONINFOEX { OSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)) }; osVersionInfoMock.MajorVersion = majorVersion; osVersionInfoMock.MinorVersion = minorVersion; Win32ApiProviderMock win32ApiProviderMock = new Win32ApiProviderMock(osVersionInfoMock); OSVersion.SetWin32ApiProvider(win32ApiProviderMock); // act OSVersionExtension.OperatingSystem operatingSystem = OSVersion.GetOperatingSystem(); // assert Assert.AreEqual(OSVersionExtension.OperatingSystem.Unknown, operatingSystem); }
public void DetectWindows81(int majorVersion, int minorVersion, ProductType productType) { // arrange var osVersionInfoMock = new OSVERSIONINFOEX { OSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)) }; osVersionInfoMock.MajorVersion = majorVersion; osVersionInfoMock.MinorVersion = minorVersion; osVersionInfoMock.ProductType = productType; Win32ApiProviderMock win32ApiProviderMock = new Win32ApiProviderMock(osVersionInfoMock); OSVersion.SetWin32ApiProvider(win32ApiProviderMock); // act OSVersionExtension.OperatingSystem operatingSystem = OSVersion.GetOperatingSystem(); // assert Assert.AreEqual(OSVersionExtension.OperatingSystem.Windows81, operatingSystem); }
public void DetectWindowsHomeServer(int majorVersion, int minorVersion, SuiteMask suiteMask) { // arrange var osVersionInfoMock = new OSVERSIONINFOEX { OSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)) }; osVersionInfoMock.MajorVersion = majorVersion; osVersionInfoMock.MinorVersion = minorVersion; osVersionInfoMock.SuiteMask = suiteMask; Win32ApiProviderMock win32ApiProviderMock = new Win32ApiProviderMock(osVersionInfoMock); OSVersion.SetWin32ApiProvider(win32ApiProviderMock); // act OSVersionExtension.OperatingSystem operatingSystem = OSVersion.GetOperatingSystem(); // assert Assert.AreEqual(OSVersionExtension.OperatingSystem.WindowsHomeServer, operatingSystem); }
public void DetectWindowsServer2003(int majorVersion, int minorVersion, ProductType productType) { // arrange var osVersionInfoMock = new OSVERSIONINFOEX { OSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX)) }; osVersionInfoMock.MajorVersion = majorVersion; osVersionInfoMock.MinorVersion = minorVersion; osVersionInfoMock.ProductType = productType; List <KeyValuePair <SystemMetric, int> > systemMetrics = WindowsServer2003Rules.SYSTEMMETRICS; Win32ApiProviderMock win32ApiProviderMock = new Win32ApiProviderMock(osVersionInfoMock, systemMetrics); OSVersion.SetWin32ApiProvider(win32ApiProviderMock); // act OSVersionExtension.OperatingSystem operatingSystem = OSVersion.GetOperatingSystem(); // assert Assert.AreEqual(OSVersionExtension.OperatingSystem.WindowsServer2003, operatingSystem); }