Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как получить список инсталлированных программ

Delphi , ОС и Железо , Реестр



Автор: http://www.swissdelphicenter.ch

uses
  Registry;

procedure TForm1.Button1Click(Sender: TObject);
const
  UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  SubKeys: TStringList;
  ListItem: TlistItem;
  i: integer;
  sDisplayName, sUninstallString: string;
begin
  {
    ListView1.ViewStyle := vsReport;
    ListView1.Columns.add;
    ListView1.Columns.add;
    ListView1.Columns[0].caption := 'DisplayName';
    ListView1.Columns[1].caption := 'UninstallString';
    ListView1.Columns[0].Width := 300;
    ListView1.Columns[1].Width := 300;
   }
  Reg := TRegistry.Create;
  with Reg do
  try
    with ListView1.Items do
    try
      BeginUpdate;
      Clear;
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyReadOnly(UNINST_PATH) then
      begin
        SubKeys := TStringList.Create;
        try
          GetKeyNames(SubKeys);
          CloseKey;
          for i := 0 to subKeys.Count - 1 do
            if OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
            try
              sDisplayName := ReadString('DisplayName');
              sUninstallString := ReadString('UninstallString');
              if sDisplayName <> '' then
              begin
                ListItem := Add;
                ListItem.Caption := sDisplayName;
                ListItem.subitems.Add(sUninstallString);
              end;
            finally
              CloseKey;
            end;
        finally
          SubKeys.Free;
        end;
      end;
    finally
      ListView1.AlphaSort;
      EndUpdate;
    end;
  finally
    CloseKey;
    Free;
  end;
end;

Программа на Delphi, которая извлекает список установленных программ на компьютере Windows и отображает его в контроле ListView.

Обзор кода:

  1. Константа UNINST_PATH определяет путь к ключу "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" в реестре, который содержит информацию о установленных программах.
  2. Программа создает объект TRegistry, называемый Reg, который используется для чтения и записи значений в реестре.
  3. Программа использует объект TStringList, называемый SubKeys, для хранения имён подключений под ключом "UNINST_PATH".
  4. Программа проходит по каждому подключению и открывает его для чтения.
  5. Для каждого подключения программа читает два значения: DisplayName и UninstallString. Эти значения используются для заполнения объекта TListViewItem, называемого ListItem.
  6. Если значение DisplayName не пусто, программа добавляет новый элемент в контрол ListView с именем программы как заголовком и строкой удаления как подэлементом.
  7. Наконец, программа освобождает память, зарезервированную объектами Reg и SubKeys.

Вывод этой программы - список элементов ListView, отображающий имена и строки удаления установленных программ.

Альтернативное решение:

Вместо использования реестра для извлечения списка установленных программ можно использовать API Windows Installer (MSI) для получения списка установленных продуктов. Этоapproach будет более надежным и reliabler, чем полагаться на реестр.

Пример кода, демонстрирующий использование MSI API:

uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  installer: Variant;
  products: Variant;
begin
   // Создаем экземпляр объекта Windows Installer
  installer := CreateOleObject('WindowsInstaller.Installer');

   // Получаем список установленных продуктов
  products := installer.Products;

   // Перебираем каждый продукт и отображаем его имя и строку удаления
  for var i := Low(products) to High(products) do
  begin
    WriteLn(products[i].Name);   // Отображаем имя продукта
    WriteLn(products[i].UninstallString);   // Отображаем строку удаления
  end;
end;

В этом коде создается экземпляр объекта Windows Installer и используется свойство Products для получения списка установленных продуктов. Затем программа проходит по каждому продукту и отображает его имя и строку удаления с помощью свойств Name и UninstallString, соответственно.

Обратите внимание, что этоapproach требует наличия API Windows Installer на системе, что не всегда является случае (например, на более старых версиях Windows). Альтернативный подход, основанный на реестре, работает на всех версиях Windows.

В статье описывается способ получения списка инсталлированных программ на компьютере с помощью языка программирования Delphi и использованием функции.registry.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:19:00/0.00826096534729/1