Получение exe-имени установленных программ в C#?
Я использую это, чтобы получить имена программ, но мне нужны имена exe. Как мне их найти?
string SoftwareKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products";
RegistryKey rk = default(RegistryKey);
rk = Registry.LocalMachine.OpenSubKey(SoftwareKey);
//string skname = null;
string sname = string.Empty;
foreach (string skname in rk.GetSubKeyNames())
{
try
{
sname = Registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("DisplayName").ToString();
listBox1.Items.Add(sname);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Я пытаюсь сделать это:
System.Diagnostics.Process.Start("Name.exe");
запустить программу.
3 ответа
Установщик не знает и не может знать об исполняемых файлах. Он знает только об установочном пакете - файле.MSI.
Чтобы получить имена исполняемых файлов (да, многие "программы" состоят из множества.EXE-файлов), вам необходимо запросить MSI-файл.
Не имея ясности в деталях, вы можете получить.exe-файлы на локальных дисках как таковые:
var allExePaths =
from drive in Environment.GetLogicalDrives()
from exePath in Directory.GetFiles(drive, "*.exe", SearchOption.AllDirectories)
select exePath;
Если вы ищете конкретный, пожалуйста, предоставьте более подробную информацию о том, что именно определит тот, который вы ищете. Использование реестра для просмотра списка установленных программ не похоже на то, что вы хотите делать, поэтому, пожалуйста, будьте более конкретны.
В Windows программы обычно устанавливаются с помощью MSI-файла, и может быть несколько EXE-файлов, установленных одним пакетом. Это правда, что иногда программы устанавливаются программой setup.exe, но они являются просто оберткой, извлекающей настоящий MSI-файл.
Некоторые поставщики, такие как InstallShield, могут хранить файл setup.exe где-нибудь на локальном жестком диске на тот случай, если пользователю потребуется снова запустить файл setup.exe для изменения или удаления. Тем не менее, это реализация конкретного поставщика.