Microsoft.Win32 void Main() { GetFWVersion().Dump ("According to Registry"); } static Version _version; public static Version GetFWVersion () { if (_version != null) return _version; if (typeof (int).GetType ().BaseType.Name == "Type") return _version = new Version (4, 0); using (var key = Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full")) { int? versionKey = key == null ? null : key.GetValue ("Release") as int?; if (versionKey >= 460798) return _version = new Version (4, 7); if (versionKey >= 394802) return _version = new Version (4, 6, 2); if (versionKey >= 394254) return _version = new Version (4, 6, 1); if (versionKey >= 393273) return _version = new Version (4, 6); if (versionKey >= 379893) return _version = new Version (4, 5, 2); if (versionKey >= 378675) return _version = new Version (4, 5, 1); } return _version = new Version (4, 5); }