Take a look at Windows Management Instrumentation
WMI Tasks: Computer Software[
^]
And make at WMI query with "Select * from Win32_Product"
WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT * FROM Win32_Product");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wqlQuery);
foreach (ManagementObject row in searcher.Get())
{
object name = row["Name"];
object version = row["Version"];
Console.WriteLine("Name: " + name + " - Version: " + version);
}