sumitk.cadc Ответов: 1

Как получить расположение установки из реестра в C#?


Всем привет
я хочу получить место установки всех продуктов в моем приложении поэтому для этой цели я использую класс реестра и использую для него строковое значение ниже
"Software\корпорация Майкрософт\каталог\Windows\\CurrentVersion будет\\удалить"
и
"Программное обеспечение\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Удалить" для 64-битной версии.
но он не дает мне подробностей обо всех продуктах например
notepad ++ доступен в приведенном выше пути в редакторе реестра, но с помощью моего кода он не отображает значения для notepad.

Что я уже пробовал:

ниже приведен мой код

<pre>  StreamWriter sw = new StreamWriter(@"D:\localmachineProducts64.txt", true);
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
            {
                foreach (string skName in rk.GetSubKeyNames())
                {
                    using (RegistryKey sk = rk.OpenSubKey(skName))
                    {
                        try
                        {
                            sw.Write(sk.GetValue("DisplayName") + "\t" + sk.GetValue("InstallLocation"));
                            sw.Write(sw.NewLine);
                            count++;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
                sw.Write("Total count  :=" + count);
            }
            sw.Close();

Richard MacCutchan

Пойдите и посмотрите в реестре, чтобы увидеть, какая информация там есть. Не все продукты будут вставлять все поля.

Richard Deeming

Выполняется ли ваш код в 32-разрядном приложении?
OpenSubKey() возвращает null для раздела реестра, который я вижу в regedit.exe[^]

1 Ответов

Рейтинг:
0

Dave Kreskowiak

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

Невозможно получить установленное местоположение каждого из перечисленных приложений.

Кроме того, не каждое установленное приложение даже отображается под ключом удаления!


sumitk.cadc

привет Дэйв,
Спасибо за ваш комментарий.
мое требование заключается в том, что я хочу проверить место установки любого продукта.
так что вы можете мне помочь, как я могу этого достичь.
или программного обеспечения реестра HKEY_LOCAL_MACHINE\или HKEY_LOCAL_MACHINE \ программное обеспечение\\Wow6432Node
я хочу найти имя "папки продукта", и если оно там есть, то я хочу прочитать все значения.
Например, я хочу проверить расположение папки продукта McAfee в узле реестра

Dave Kreskowiak

Ваше "требование" - это принятие желаемого за действительное. Нет никакого способа получить нужную информацию по каждому приложению.

Вы пытались найти "Блокнот". Ну, он никогда не был "установлен". Исполняемый файл был заложен при установке Windows. Никакой информации для него нигде не хранится.

Установщики MSI могут поместить свой путь InstalledPath под ключ удаления. Нет никаких требований, которые говорят, что они должны это сделать. Путь установки вычисляется большинством MSI во время установки/удаления, поэтому на самом деле нет никакой необходимости помещать путь установки в реестр.

Исполняемые установщики не должны ничего помещать под ключ удаления и обычно этого не делают. Обычно в реестре о них вообще ничего нет.

Нужных вам данных просто не существует!