まず、システム上にインストールされているすべてのプログラムをスキャンします。これから私はInstallLocationとDisplayNameを取得します。 この名前または場所からスキャンしたプログラムを実行します。 これを行う方法はありますか、または実行可能ファイルの名前や場所が本当に必要ですか?インストール場所からプログラムを実行
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);
}
}
プログラムの起動方法については、 'System.Diagnostics.Process'を参照してください。 –