2009-05-26 2 views
2

Как найти путь выполнения установленного программного обеспечения в C#, например, медиаплеер, vlc-плеер. Мне просто нужно найти их путь выполнения. если у меня есть vlc-плеер, установленный на моем диске D. Как найти путь к vlc.exe от моего C# кодированияКак найти путь выполнения установленного программного обеспечения

+1

Вы хотите посмотреть реестр? – annakata

+0

да как я могу это сделать из C# – Arunachalam

ответ

2

Этот метод работает для любого исполняемого файла, расположенного в папке, которая определена в переменной окна PATH:

private string LocateEXE(String filename) 
{ 
    String path = Environment.GetEnvironmentVariable("path"); 
    String[] folders = path.Split(';'); 
    foreach (String folder in folders) 
    { 
     if (File.Exists(folder + filename)) 
     { 
      return folder + filename; 
     } 
     else if (File.Exists(folder + "\\" + filename)) 
     { 
      return folder + "\\" + filename; 
     } 
    } 

    return String.Empty; 
} 

Затем использовать его следующим образом:

string pathToExe = LocateEXE("example.exe"); 

Как метод Фредрик в это только находит пути для некоторых исполняемых файлов

+0

небольшие исправления, так что ваш код будет работать: 1) Вся часть кода ur не возвращает значение, 2) «LocateEXE» (с ошибкой) 3) папка + «\\» + имя файла. Но это будет работать только тогда, когда переменные пути задаются приложением, которое вы устанавливаете. В большинстве случаев это не сработает. И что еще, если часть делает? Можете ли вы объяснить это? – SyncMaster

+0

1 и 2) oops, исправить это сейчас, 3) пропустил + «\\» +, который предназначен для проверки того, что папки на пути не завершены обратным слэшем – RobV

+0

. Да, это правда, что он не будет работать много случаев, но это то же самое, что и предложение Фредрика, и мы оба указали, что он не будет работать все время. Возможно, вам просто проще иметь AppSetting или подобное в вашем приложении, которое вы попросите конечного пользователя настроить для указания на VLC. – RobV

8

Использование C# код, который вы можете найти путь для некоторых excutables этот путь:

private const string keyBase = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"; 
private string GetPathForExe(string fileName) 
{ 
    RegistryKey localMachine = Registry.LocalMachine; 
    RegistryKey fileKey = localMachine.OpenSubKey(string.Format(@"{0}\{1}", keyBase, fileName)); 
    object result = null; 
    if (fileKey != null) 
    { 
     result = fileKey.GetValue(string.Empty); 
    } 
    fileKey.Close(); 

    return (string)result; 
} 

Использование это так:

string pathToExe = GetPathForExe("wmplayer.exe"); 

Однако вполне может быть, что приложение, которое вы хотите, не имеет ключа App Paths.

+0

Спасибо, это было то, что мне нужно. –

0

This stackoverflow.com article описывает, как получить приложение, связанное с определенным расширением файла.

Возможно, вы можете использовать эту технику, чтобы получить приложение, связанное с определенными расширениями, такими как avi или wmv - либо Medial Player, либо в вашем случае VLC-плеер?

0

Я использовал ключ реестра CurrentVersion \ Installer \ Folders. Просто перейдите в название продукта.

private string GetAppPath(string productName) 
    { 
     const string foldersPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"; 
     var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 

     var subKey = baseKey.OpenSubKey(foldersPath); 
     if (subKey == null) 
     { 
      baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 
      subKey = baseKey.OpenSubKey(foldersPath); 
     } 
     return subKey != null ? subKey.GetValueNames().FirstOrDefault(kv => kv.Contains(productName)) : "ERROR";   
    } 
Смежные вопросы