С# WPF Работа с реестром через WMI

102
18 января 2021, 11:40

Необходимо получить список всех установленных приложений на удаленном компьютере. Класс WMI Win32_Pdoduct показывает только программы установленные с помощью Microsoft Installer. Для того чтобы увидеть все программы необходимо лезть в реестр (Класс StdRegProv). Подскажите как в C# с помощью WMI получить информацию из ключа реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Answer 1

https://www.morgantechspace.com/2014/04/Read-Registry-Value-using-WMI-in-CSharp.html

private static List<string> ReadRegistryusingWMI()
    {
        List<string> programs = new List<string>();
        ManagementScope scope = new ManagementScope("\\\\.\\root\\CIMV2");
        scope.Connect();
        string softwareRegLoc = @"Software\Microsoft\Windows\CurrentVersion\Uninstall";
        ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
        ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
        inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
        inParams["sSubKeyName"] = softwareRegLoc;
        // Read Registry Key Names 
        ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
        string[] programGuids = outParams["sNames"] as string[];
        foreach (string subKeyName in programGuids)
        {
            inParams = registry.GetMethodParameters("GetStringValue");
            inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName;
            inParams["sValueName"] = "DisplayName";
            // Read Registry Value 
            outParams = registry.InvokeMethod("GetStringValue", inParams, null);
            if (outParams.Properties["sValue"].Value != null)
            {
                string softwareName = outParams.Properties["sValue"].Value.ToString();
                programs.Add(softwareName);
            }
        }
        return programs;
    }
    //HKEY_CLASSES_ROOT (2147483648 (0x80000000))
    //HKEY_CURRENT_USER (2147483649 (0x80000001))
    //HKEY_LOCAL_MACHINE (2147483650 (0x80000002))
    //HKEY_USERS (2147483651 (0x80000003))
    //HKEY_CURRENT_CONFIG (2147483653 (0x80000005))
READ ALSO
Как подключить DLL без Visual Studio C#

Как подключить DLL без Visual Studio C#

Я гуглил, смотрел, всюду делается dll в vs, а потом там же и подключаетсяМеня интересует как ее подключить без vs? Создать библиотеку я узнал как...

98
Ошибка сравнивания массивов

Ошибка сравнивания массивов

решил написать программу, как она работает, написано в комментариях в коде

96
редактирование xml файла в c#

редактирование xml файла в c#

вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что если нужно добавить/удалить элемент в xml файле? как через код это...

108
Не работает часть скрипта Unity C#

Не работает часть скрипта Unity C#

Часть кода работает, при столкновении с пулей (hp1 -= damage1;), а вторая часть не работаетПодскажите, в чем ошибся?

124