Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение списка установленных программ, как грамотно это реализовать 
:(
    Опции темы
sosedoff
Дата 26.1.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 17.3.2007
Где: Уфа

Репутация: нет
Всего: нет



Здравствуйте господа..
Кто знает, как можно получить список установленных программ, с указанием пути установки?
PM MAIL WWW ICQ   Вверх
Stepan_Lameroff
Дата 27.1.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Смотрите в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
или WMI Win32_Product Class
PM MAIL   Вверх
windOFchange
Дата 4.4.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.4.2008

Репутация: нет
Всего: нет



Сделал по этому методу, и сталкнулся с такой проблемой. Название проги "живёт" в ключе DisplayName. То есть перебирая все ключи из приведённого выше поста поидее можно достать все названия прог установленных в системе (этот способ как раз и указывают во всех постах инета). НО! во первых этот ключ иногда бывает пустым (Alcohol например), кроме того там может быть записана совсем какая то левая инфа. Например ставлю прогу Лан агент, она в этом ключе пишет "система". И чего вот с этим делать? При этом когда смотрю в "установка и удаление программ" эти проги названы по человечески... в чём же дело? Откуда тогда их берёт винда? Может есть ещё места хранения списка реально инсталлированного софта? Пожалуйста ответьте...
PM MAIL   Вверх
Rififi
Дата 4.4.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Цитата(windOFchange @  4.4.2008,  13:37 Найти цитируемый пост)
Может есть ещё места хранения списка реально инсталлированного софта?

MsiEnumProductsEx
PM MAIL   Вверх
windOFchange
Дата 6.4.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.4.2008

Репутация: нет
Всего: нет



нда... как то там всё нерусским по белому написано...  smile  а чуть попонятнее можно написать?
PM MAIL   Вверх
Levon11
Дата 22.7.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.8.2007

Репутация: нет
Всего: нет



А как это использовать??? smile 
PM MAIL   Вверх
Wanderer2019
Дата 22.7.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



возможно что то вроде этого 

Код

 [DllImport("msi.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int MsiEnumProducts(int iProductIndex, StringBuilder lpProductBuf);

        [DllImport("msi.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 

        static void Main(string[] args)
        {
             StringBuilder sb = new StringBuilder(39);
            
             MsiEnumProducts(index, sb)
            
             int len = 512;
             StringBuilder productname = new StringBuilder(len);

             MsiGetProductInfo(
                    sb.ToString(),
                    "InstalledProductName", 
                    productname , 
                    ref len);

              Console.WriteLine(productname.ToString());
        }

PM ICQ MSN   Вверх
Kolovorot
Дата 16.2.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: нет
Всего: 3



Цитата(Wanderer2019 @ 22.7.2008,  19:18)
возможно что то вроде этого 

Код

 [DllImport("msi.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int MsiEnumProducts(int iProductIndex, StringBuilder lpProductBuf);

        [DllImport("msi.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 

        static void Main(string[] args)
        {
             StringBuilder sb = new StringBuilder(39);
            
             MsiEnumProducts(index, sb)
            
             int len = 512;
             StringBuilder productname = new StringBuilder(len);

             MsiGetProductInfo(
                    sb.ToString(),
                    "InstalledProductName", 
                    productname , 
                    ref len);

              Console.WriteLine(productname.ToString());
        }

Случайно никто не знает как это можно использовать для конкретного компьютера в домене и можно ли узнать количество установленного ПО?
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
jonie
Дата 16.2.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Kolovorot, через WMI можно всяко, насчет MSI* функций крайне не уверен...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Kolovorot
Дата 17.2.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: нет
Всего: 3



Про WMI знаю. Но по моему у него есть один существенный недостаток  описаный выше:
 "Сделал по этому методу, и сталкнулся с такой проблемой. Название проги "живёт" в ключе DisplayName. То есть перебирая все ключи из приведённого выше поста поидее можно достать все названия прог установленных в системе (этот способ как раз и указывают во всех постах инета). НО! во первых этот ключ иногда бывает пустым (Alcohol например), кроме того там может быть записана совсем какая то левая инфа. Например ставлю прогу Лан агент, она в этом ключе пишет "система". И чего вот с этим делать? При этом когда смотрю в "установка и удаление программ" эти проги названы по человечески... в чём же дело? Откуда тогда их берёт винда? Может есть ещё места хранения списка реально инсталлированного софта? Пожалуйста ответьте..."
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
jonie
Дата 17.2.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Kolovorot, ладно, фиг с ним с WMI. Что насчет удаленного реестра?)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Kolovorot
Дата 17.2.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: нет
Всего: 3



Цитата(jonie @ 17.2.2011,  10:41)
Kolovorot, ладно, фиг с ним с WMI. Что насчет удаленного реестра?)

Так там вроде та же проблема. Но я уже согласен и на удаленный реестр. smile 

Это сообщение отредактировал(а) Kolovorot - 17.2.2011, 14:37
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
krulik
Дата 24.2.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 14.1.2006
Где: Украина, Житомир

Репутация: нет
Всего: 4



Kolovorot
Цитата(Kolovorot @  17.2.2011,  00:00 Найти цитируемый пост)
Может есть ещё места хранения списка реально инсталлированного софта

для "установка и удаление программ" Винда значения берет только из Uninstall ветки.

по поводу ситуации с "Лан агентом" и подобными прогами. Очень часто врстечал следующую ситуацию:

в Uninstall ветке инсталятор может создать 1,2,3 и т.д ключей (так уж разработчик инсталяхи придумал себе).
К примеру может получится что вы увидите ключ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{00000000-0000-0000-0000-000000000000}" у которого DisplayName пустой или с левой инфой (но вы уверены что это имено нужный вам продукт), но тут же вы можете увидеть параметр SystemComponent=1 (эта фигня прячет запись из "установка и удаление программ"). Если это ваш случай, то ищите в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall еще один ключ, у которого DisplayName такой как и в "установка и удаление программ". Причем этот второй ключ может не с гуидом быть, а просто с именем продуката: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\LanAgent.


--------------------
Каждый день несет в себе частицу вечности (Паоло Коэльо)Если вам плюют в спину, значит вы в переди! (Конфуций)Все, что имеет форму, может исчезнуть в одно мгновение (Харуки Мураками)
PM MAIL ICQ   Вверх
Migelь
Дата 16.1.2012, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 25.2.2009

Репутация: нет
Всего: нет



Вопрос в тему, можно как-то отслеживать установку\удаления программ, если не запоминать список установленных программ?

PM MAIL   Вверх
Migelь
Дата 16.1.2012, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 25.2.2009

Репутация: нет
Всего: нет



Цитата(Migelь @ 16.1.2012,  20:54)
Вопрос в тему, можно как-то отслеживать установку\удаления программ, если не запоминать список установленных программ?

Вопрос снят, протоколирование реестра как вариант ответа.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1518 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.