C# создание утилиты выдающей список установленного ПО

Привет.
Подскажите, а можно ли написать оконную утилиту на с#, чтобы она выдавала список установленного на компе ПО?
Я так понимаю, это должно осуществляться при помощи функции winAPi, которая читает их из реестра, но… :undecided: как?

MSDN в помощь. Ссылка

По аналогии с верхним примером можно перебором данные полученные из веток Uninstall ‘вываливать’ в List View…

Все очень просто, информация вытаскивается с помощью WMI. Сделано в консольном режиме, думаю переделать у Вас получится.

using System;
using System.Management;

namespace test
{
class Program
{
public static void Main(string[] args)
{
        ManagementObjectSearcher searcher_soft = 
        new ManagementObjectSearcher("root\\CIMV2", 
           "SELECT * FROM Win32_Product"); 

        foreach (ManagementObject queryObj in searcher_soft.Get())
        {
            Console.WriteLine("<soft> Caption: {0} ; InstallDate: {1}</soft>", 
                              queryObj["Caption"], queryObj["InstallDate"]);
        }

        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
}
}
}

З.Ы. Не забудьте вручную добавить Reference - System.Management, а то будет ругаться на namespace

Еще вопрос - под какой Framework пишете?

В аттаче, привел пример с использованием WMI, вот процедурка:

private void LoadSoftwareList() 
    { 
        listBox1.Items.Clear(); 
        ManagementObjectCollection moReturn;   
        ManagementObjectSearcher moSearch; 
 
        moSearch = new ManagementObjectSearcher("Select * from Win32_Product"); 
 
        moReturn = moSearch.Get(); 
       foreach(ManagementObject mo in moReturn) 
       { 
           listBox1.Items.Add(mo["Name"].ToString()); 
       } 
 
    } 

В Button Click используется так:


private void button1_Click(object sender, EventArgs e)
        {
            LoadSoftwareList();
        }

GetSoftware.zip (41.2 KB)

Похоже, что под .NET Framework 3.5. С# 2008.

То ли версия Си у Вас новее, то ли ещё что-то не так, но Ваша программа не запускается. А если открыть в блокноте и оттуда вынуть код, то тогда появляются “ошибки” и оно не работает =(


Щелкните правой кнопкой по проекту (в Solution Explorer), найдите - Add Reference, в открывшемся окне, в списке компонентов найдите и добавьте, как было сказано чуть выше в проект референс - System.Management и все заработает :wink:

На форме должно быть две кнопки и один List View.

З.Ы. не открылось потому что проект был создан в VS 2010, скорее всего в этом причина

В файле с расширением .csproj прописала Include=“System.Management.Automation” />, но ошибки не ушли, а он ещё и на это обращение стал ругаться.

Удалите Вашу запись из файла .csproj и добавьте референс через Solution Explorer - Add Reference…

З.Ы. могу через Team Viewer подключиться и проставить референс если хотите…

АааАА!!! Заработало!!! :yahoo:
Огромное спасибо Вам, люди, за помощь и терпение :smitten: