Как получить программный путь для установки другого приложения? - PullRequest
8 голосов
/ 12 октября 2010

Я хотел бы знать, где находится путь установки приложения.Я знаю, что обычно он находится в ... \ Program Files ... но я думаю, что некоторые люди устанавливают его в разных местах.Я знаю название приложения.

Спасибо.

Ответы [ 6 ]

12 голосов
/ 12 октября 2010

Идеальный способ найти путь установки программы (в Windows) - это прочитать его из реестра.Большинство установщиков создают раздел реестра для этой программы, который содержит путь установки.Точно, где этот ключ и как он будет назван, зависит от рассматриваемой программы.

Чтобы узнать, есть ли у программы ключ в реестре, откройте ' regedit ' и используйте опцию Edit> Find, чтобы попытаться найти ключ с именем программы.Если такой ключ существует, вы можете прочитать его, используя класс RegistryKey в библиотеке .NET Framework.

Если в программе нет раздела реестра, другой вариант - просто попросить пользователя найти файл .exe с OpenFileDialog, хотя это, очевидно, не идеально.

10 голосов
/ 12 октября 2010

Многие (большинство?) Программ создают раздел реестра App Paths.Посмотрите на

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
4 голосов
/ 12 октября 2010

Если вы знаете, что рассматриваемое приложение (по сравнению с любым приложением), раздел реестра, вероятно, является наилучшим вариантом (если он существует).

При установке может быть где-то вставлен свой собственный «ключ пути установки» (так же, как упомянул Фара), или он может находиться в разделе удаления установленных программ, поэтому вы можете проверить:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall

Но имейте в виду, что любая новая версия установки может изменить записываемый ключ как для пользовательского ключа, так и длязапись удаления.Поэтому проверка реестра, вероятно, должна проводиться только для известной установки \ версии.

теп

3 голосов
/ 13 октября 2010

Лучший способ - использовать API установщика, чтобы найти местоположение программы. Вы можете написать управляемую оболочку через API

Поиск MsiGetProductInfo

Ссылка: http://msdn.microsoft.com/en-us/library/aa369558(VS.85).aspx

0 голосов
/ 12 апреля 2019

Загляните в реестр.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

или

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

Каждый из перечисленных выше содержит список подразделов, по одному для каждого установленного приложения (какон появляется, например, в апплете «Программы и компоненты»)

Вы можете найти там свое приложение или, если вам известен код продукта, получить прямой доступ к нему.

    public string GetInstallPath(string applicationName)
    {
        var installPath = FindApplicationPath(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", applicationName);

        if (installPath == null)
        {
            installPath = FindApplicationPath(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", applicationName);
        }

        return installPath;
    }

    private string FindApplicationPath(string keyPath, string applicationName)
    {

        var hklm = Registry.LocalMachine;
        var uninstall = hklm.OpenSubKey(keyPath);
        foreach (var productSubKey in uninstall.GetSubKeyNames())
        {
            var product = uninstall.OpenSubKey(productSubKey);

            var displayName = product.GetValue("DisplayName");
            if (displayName != null && displayName.ToString() == applicationName)
            {
                return product.GetValue("InstallLocation").ToString();
            }

        }

        return null;
    }
0 голосов
/ 17 февраля 2016

Вы можете использовать MSI (я написал обертку для C # здесь https://github.com/alialavia/MSINet). Вот простой пример:

var location = "";
foreach (var p in InstalledProduct.Enumerate())
{
    try
    {
        if (p.InstalledProductName.Contains("AppName"))                     
        {
            location = p.InstallLocation;
            break;
        }
    } 
    catch { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...