как найти путь выполнения установленного программного обеспечения

2

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

  • 1
    Вы имеете в виду, что хотите просмотреть реестр?
  • 0
    да как я могу сделать это с C #
Теги:

5 ответов

3
Лучший ответ

Этот метод работает для любого исполняемого файла, который находится в папке, которая определена в переменной Windows 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");

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

  • 0
    небольшие исправления, чтобы ваш код работал: 1) вся часть кода не возвращает значение, 2) 'LocateEXE' (с ошибкой) 3) папка + "\\" + имя файла. Но это будет работать только тогда, когда переменные пути устанавливаются приложением, которое вы устанавливаете. В большинстве случаев это не сработает. И что еще, если часть делает.? Ты можешь это объяснить?
  • 0
    1 & 2) К сожалению, исправлено, что теперь, 3) пропустил + "\\" +, который предназначен для проверки папок в пути, который не заканчивается обратной косой чертой
Показать ещё 2 комментария
8

Используя код С#, вы можете найти путь для некоторых 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

Я использовал раздел реестра 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";          
    }
0

qaru.site/questions/266878/... описано, как получить приложение, связанное с определенным расширением файла.

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

0

Посмотрите MsiEnumProductsEx

  • 0
    Можете ли вы объяснить мне подробно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню