Поиск директории любого приложения

Регистрация
28.10.2017
Сообщения
1 154
Реакции
282
Сайт
tehadm.ru
Программа пробегается по основным ветвям реестра и ищет в Uninstall программу с нужным вам именем. Если вы сможете получить доступ ко всей ветви LocalMachine, то сможете искать установленные приложения и на других дисках, прошу поделиться этим кодом, если у вас получится.
В случае отсутствия ключа с необходимым DisplayName, метод GetApplictionInstallPath вернет Не найдено.

C#:
using System;
using Microsoft.Win32;

namespace Finder
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetApplictionInstallPath(Console.ReadLine()));
            Console.ReadKey();
        }

        public static string GetApplictionInstallPath(string nameOfAppToFind)
        {
            RegistryKey registryKey;
            string keyName, install = null, uninstall = null;

            keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
            registryKey = ExistsInSubKey(Registry.CurrentUser, keyName, "DisplayName", nameOfAppToFind);
            if (registryKey != null)
            {
                try
                {
                    install = registryKey.GetValue("InstallLocation") as string;
                    uninstall = registryKey.GetValue("UninstallString") as string;
                }
                catch { }

                if (!String.IsNullOrEmpty(install))
                    return install;
                else if (!String.IsNullOrEmpty(uninstall))
                    return uninstall;
            }

            keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
            registryKey = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
            if (registryKey != null)
            {
                try
                {
                    install = registryKey.GetValue("InstallLocation") as string;
                    uninstall = registryKey.GetValue("UninstallString") as string;
                }
                catch { }

                if (!String.IsNullOrEmpty(install))
                    return install;
                else if (!String.IsNullOrEmpty(uninstall))
                    return uninstall;
            }

            keyName = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
            registryKey = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
            if (registryKey != null)
            {
                try
                {
                    install = registryKey.GetValue("InstallLocation") as string;
                    uninstall = registryKey.GetValue("UninstallString") as string;
                }
                catch { }

                if (!String.IsNullOrEmpty(install))
                    return install;
                else if (!String.IsNullOrEmpty(uninstall))
                    return uninstall;
            }

            return "Не найдено";
        }

        private static RegistryKey ExistsInSubKey(RegistryKey root, string subKeyName, string attributeName, string nameOfAppToFind)
        {
            RegistryKey subkey;
            string displayName;

            RegistryKey key = root.OpenSubKey(subKeyName);
            if (key != null)
            {
                foreach (string kn in key.GetSubKeyNames())
                {
                    subkey = key.OpenSubKey(kn);
                    displayName = subkey.GetValue(attributeName) as string;
                    if (nameOfAppToFind.Equals(displayName))
                        return subkey;
                }
            }
            return null;
        }
    }
}
 
Верх