Get OS, Service Pack Information
Use the System.Environment.OSVersion
  1. OperatingSystem os = System.Environment.OSVersion;
  2. Console.WriteLine("Platform: {0}", os.Platform);
  3. Console.WriteLine("Service Pack: {0}", os.ServicePack);
  4. Console.WriteLine("Version: {0}", os.Version);
  5. Console.WriteLine("VersionString: {0}", os.VersionString);
  6. Console.WriteLine("CLR Version: {0}", System.Environment.Version);
This produces the following output (on my Windows 7 system):
Platform: Win32NT
Service Pack:
Version: 6.1.7600.0
VersionString: Microsoft Windows NT 6.1.7600.0
CLR Version: 4.0.21006.1
The version information is in a struct, so you can make decisions based on version or subversion values.
Get CPU and Other Hardware Information
  1. using System;
  2. using System.Management;
  3. using System.Windows.Forms;
  4. namespace HardwareInfo
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. Console.WriteLine("Machine: {0}", Environment.MachineName);
  11. Console.WriteLine("# of processors (logical): {0}", Environment.ProcessorCount);
  12. Console.WriteLine("# of processors (physical): {0}", CountPhysicalProcessors());
  13. Console.WriteLine("RAM installed: {0:N0} bytes", CountPhysicalMemory());
  14. Console.WriteLine("Is OS 64-bit? {0}", Environment.Is64BitOperatingSystem);
  15. Console.WriteLine("Is process 64-bit? {0}", Environment.Is64BitProcess);
  16. Console.WriteLine("Little-endian: {0}", BitConverter.IsLittleEndian);
  17. foreach (Screen screen in System.Windows.Forms.Screen.AllScreens)
  18. {
  19. Console.WriteLine("Screen {0}", screen.DeviceName);
  20. Console.WriteLine("\tPrimary {0}", screen.Primary);
  21. Console.WriteLine("\tBounds: {0}", screen.Bounds);
  22. Console.WriteLine("\tWorking Area: {0}", screen.WorkingArea);
  23. Console.WriteLine("\tBitsPerPixel: {0}", screen.BitsPerPixel);
  24. }
  25. Console.ReadKey();
  26. }
  27. private static UInt32 CountPhysicalProcessors()
  28. {
  29. //you must add a reference to the System.Management assembly
  30. ManagementObjectSearcher objects =
  31. new ManagementObjectSearcher(
  32. "SELECT * FROM Win32_ComputerSystem");
  33. ManagementObjectCollection coll = objects.Get();
  34. foreach (ManagementObject obj in coll)
  35. {
  36. return (UInt32)obj["NumberOfProcessors"];
  37. }
  38. return 0;
  39. }
  40. private static UInt64 CountPhysicalMemory()
  41. {
  42. ManagementObjectSearcher objects =
  43. new ManagementObjectSearcher(
  44. "SELECT * FROM Win32_PhysicalMemory");
  45. ManagementObjectCollection coll = objects.Get();
  46. UInt64 total = 0;
  47. foreach (ManagementObject obj in coll)
  48. {
  49. total += (UInt64)obj["Capacity"];
  50. }
  51. return total;
  52. }
  53. }
  54. }