2012-07-04 4 views
3

Я использую это, чтобы получить имена программ, но мне нужны имена exe. Как их найти?Получение exe имени установленных программ в C#?

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"); 

запустить программу.

+0

Ответ найден здесь ... [http://stackoverflow.com/questions/8954461/c-sharp-application-scanning] [1] [1]: HTTP: // StackOverflow .com/questions/8954461/c-sharp-application-scan –

+0

В приведенном выше вопросе было предложено найти и отобразить все установленные приложения. Чтобы найти все exe, единственный способ сделать это - сделать рекурсивный поиск в корневом каталоге для '* .exe' –

ответ

0

Установщик не знает и действительно не может знать об исполнительных файлах. Он знает только об установочном пакете - файле .MSI.

Чтобы получить имена исполняемых файлов (да, многие «программы» состоят из множества .EXE-файлов), вам нужно будет допросить файл .MSI.

+0

, как бы я это сделал? –

+0

Посмотрите на мой обновленный вопрос –

0

В Windows программы обычно устанавливаются с помощью файла msi и может быть установлено несколько exe одним пакетом. Это правда, что иногда программы устанавливаются setup.exe, но они всего лишь оболочка, извлекающая настоящий msi-файл.

Некоторые производители, такие как InstallShield, могут хранить файл setup.exe где-то в локальном жестком диске на всякий случай, когда пользователю необходимо снова запустить setup.exe для цели \ deinstallation. Однако это специфичная для поставщика реализация.

+0

Посмотрите мой обновленный вопрос –

+0

@Elite exe файл не требуется регистрироваться в реестре и фактически в большинстве случаев, они не находятся в реестре. Представьте, что вы просто скомпилируете test.exe и поместите его в папку 'c: \ test \', как вы можете найти 'test.exe' из реестра? Пожалуйста, опишите, что именно вы пытаетесь сделать –

0

Не имея разъяснения по поводу сведений, вы можете получить Исполняемых на локальных дисках, как например:

var allExePaths = 
    from drive in Environment.GetLogicalDrives() 
    from exePath in Directory.GetFiles(drive, "*.exe", SearchOption.AllDirectories) 
    select exePath; 

Если вы ищете конкретный один, просьба представить более подробную информацию о том, что все будет определять которую вы ищете. Использование реестра для отображения установленных программ не похоже на то, что вы хотите сделать, поэтому, пожалуйста, будьте более конкретными.

Смежные вопросы