Zuerst scanne ich für jedes installierte Programm auf dem System. Von diesem bekomme ich den InstallLocation und DisplayName. Jetzt möchte ich die gescannten Programme von diesem Namen oder Ort ausführen. Gibt es eine Möglichkeit, dies zu tun, oder brauche ich wirklich den Namen oder Speicherort der ausführbaren Datei?Programme vom Installationsort ausführen
public static class InstalledPrograms
{
const string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
public static List<string> GetInstalledPrograms()
{
var result = new List<string>();
var termsList = new List<string>();
result.AddRange(GetInstalledProgramsFromRegistry(RegistryView.Registry32));
result.AddRange(GetInstalledProgramsFromRegistry(RegistryView.Registry64));
result = result.Distinct().ToList();
result.Sort();
foreach (var i in result)
{
Console.WriteLine(i);
}
return result;
}
private static IEnumerable<string> GetInstalledProgramsFromRegistry(RegistryView registryView)
{
var result = new List<string>();
using (RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView).OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
if (IsProgramVisible(subkey))
{
var ii = (string)subkey.GetValue("InstallLocation");
result.Add(ii);
}
}
}
}
return result;
}
private static bool IsProgramVisible(RegistryKey subkey)
{
var name = (string)subkey.GetValue("DisplayName");
var releaseType = (string)subkey.GetValue("ReleaseType");
//var unistallString = (string)subkey.GetValue("UninstallString");
var systemComponent = subkey.GetValue("SystemComponent");
var parentName = (string)subkey.GetValue("ParentDisplayName");
return
!string.IsNullOrEmpty(name)
&& string.IsNullOrEmpty(releaseType)
&& string.IsNullOrEmpty(parentName)
&& (systemComponent == null);
}
}
See 'System.Diagnostics.Process' Informationen darüber, wie ein Programm zu starten. –