Возвращенный список из реестра не соответствует реальному значению, которое там есть - PullRequest
0 голосов
/ 06 мая 2020

Я использую код из этого сообщения Проверить, установлено ли приложение в реестре , чтобы проверить, есть ли указанная программа в реестре:

public static bool CheckInstalled(string c_name, string c_added = null)
{
        string displayName;

        string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
        RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey);

        if (key != null)
        {                
            foreach (RegistryKey subkey in key.GetSubKeyNames().Select(keyName => key.OpenSubKey(keyName)))
            {
                displayName = subkey.GetValue("DisplayName") as string;
                if (displayName != null && ((displayName.ToLower() == c_name.ToLower() && c_added == null) || (c_added != null && (displayName.ToLower().Contains(c_name.ToLower()) && displayName != null && displayName.ToLower().Contains(c_added.ToLower())))))
                {
                    return true;
                }
            }

            key.Close();
        }

        registryKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
        key = Registry.LocalMachine.OpenSubKey(registryKey);

        if (key != null)
        {
            foreach (RegistryKey subkey in key.GetSubKeyNames().Select(keyName => key.OpenSubKey(keyName)))
            {
                displayName = subkey.GetValue("DisplayName") as string;

                if (displayName != null && ((displayName.ToLower() == c_name.ToLower() && c_added == null) || (c_added != null && (displayName.ToLower().Contains(c_name.ToLower()) && displayName != null && displayName.ToLower().Contains(c_added.ToLower())))))
                {
                    return true;
                }
            }

            key.Close();
        }

        return false;
}

И это не может найти "Microsoft SQL Server 2019 ", который существует, когда я go по пути:

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

Я добавил

var list = key.GetSubKeyNames().Select(keyName => key.OpenSubKey(keyName).GetValue("DisplayName")).ToList();

после

if (key != null)

, и это возвращает count = 205 , в то время как при запуске regedit я вижу ~ 120.

Я могу добавить, что есть несколько экземпляров с отображаемым именем «Microsoft SQL Server», и он их не находит. Когда я установил SQL Server 2017, таких проблем не было.

enter image description here

РЕДАКТИРОВАТЬ:

Проблема в том, что, несмотря на указание путь для 32 бит и 64 бит. По этому пути дважды проверяется, в какой конфигурации программа была запущена. Для параметра Any Cpu это x32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...