Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637

Ошибка при использовании MsiEnumProducts

28.08.2014, 19:09. Показов 4137. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Добрый вечер.

Ребята проблема такая, написал код, но при компиляции выдает ошибки
Code
1
2
3
4
5
6
7
8
[bcc32 Error] msi.h(776): E2015 Ambiguity between 'PHKEY' and 'Winapi::Windows::PHKEY'
  Full parser context
    Unit1.cpp(4): #include c:\program files (x86)\embarcadero\rad studio\11.0\include\windows\sdk\msiquery.h
    msiquery.h(23): #include c:\program files (x86)\embarcadero\rad studio\11.0\include\windows\sdk\msi.h
[bcc32 Error] msi.h(781): E2015 Ambiguity between 'PHKEY' and 'Winapi::Windows::PHKEY'
  Full parser context
    Unit1.cpp(4): #include c:\program files (x86)\embarcadero\rad studio\11.0\include\windows\sdk\msiquery.h
    msiquery.h(23): #include c:\program files (x86)\embarcadero\rad studio\11.0\include\windows\sdk\msi.h
Сам код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <msiquery.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
typedef UINT (WINAPI *MyMsiEnumProducts)(DWORD iProductIndex, LPTSTR lpProductBuf);
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HINSTANCE hUser = NULL;
    hUser =  LoadLibraryA("Msi.dll");
    if (hUser != NULL)
    {
       MyMsiEnumProducts filter = (MyMsiEnumProducts)GetProcAddress(hUser, "MsiEnumProducts");
       
       if (filter != NULL)
       {
          CHAR ProductCode[40];
          UINT nResult;
          AnsiString errResult;
               
          for (int nIndex = 0;;nIndex++)
          {
             nResult = MsiEnumProducts(nIndex,ProductCode);
             
             if (nResult != ERROR_SUCCESS)
             {
                if (nResult == 1610)
                   errResult = "ERROR_BAD_CONFIGURATION";
                if (nResult == 87)
                   errResult = "ERROR_INVALID_PARAMETER";
                if (nResult == 259)
                   errResult = "ERROR_NO_MORE_ITEMS";
                if (nResult == 8)
                   errResult ="ERROR_NOT_ENOUGH_MEMORY";
              
                break;
             }
             Memo1->Lines->Add(AnsiString(nIndex) + " " +AnsiString(ProductCode) );
          }
        }
       FreeLibrary(hUser);
    }
 
 
}
//---------------------------------------------------------------------------
Radstudio XE4

Добавлено через 2 часа 24 минуты
Это ошибка возникает когда даже просто подключаю
C++
1
#include <msiquery.h>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2014, 19:09
Ответы с готовыми решениями:

Ошибка при использовании парсера
Нашёл статью: http://www.rsdn.ru/article/files/Classes/tparser.xml Там есть пример использования парсера. НО при попытке...

Ошибка при использовании конструктора
Вот написал часть программы на С++, захотел проверить, но выбило ошибку Unit1.cpp(104): E2294 Structure required on left side of . or .*...

Ошибка при использовании класса
Решил написать чат. Написал маленький класс сервера: class ServChat { private: unsigned int unNumber; unsigned int umNumber; ...

27
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.08.2014, 23:40
Студворк — интернет-сервис помощи студентам
UI, можешь привести название и точную версию хотя бы одной программы,
которая не определяется через MsiEnumProductsW/MsiGetProductInfoW ?
А также, очень желательно, версию/разрядность системы + номер SP + версию
установленного Windows Installer.

Вопрос ко всем.

Попробую воспроизвести у себя на какой-нибудь виртуалке.

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Убежденный, Как понимаю тестил под x64 при чем вероятно в сборке x64 под VC++, так что могу лишь предположить что недочет возникает в сборке x32 под x64.
Я тестил в обоих вариантах - Win32 и x64, оба раза результаты были одинаковые.

Добавлено через 1 минуту
Цитата Сообщение от UI Посмотреть сообщение
Пряморукие, жду ответа... А то балаболить все умеют, я смотрю.
Если ты принял замечание о криворукости на свой счет - то ошибся,
ничего такого и в мыслях не было.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2014, 23:41
Цитата Сообщение от Убежденный Посмотреть сообщение
Я тестил в обоих вариантах - Win32 и x64, оба раза результаты были одинаковые.
Тогда мое предположение отпадает.
Я собирал/тестил под x32 Win7.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
31.08.2014, 01:10
Убежденный,

BCB6 UPDate 4
Установщик Windows®. Версия 5.0.9600.16384
Windows 8.1 x64 ( со всеми обоновлениями )
С++ builder 6 не отображается...
Миниатюры
Ошибка при использовании MsiEnumProducts   Ошибка при использовании MsiEnumProducts  
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
31.08.2014, 01:15
Кажется, я понял, в чем дело (проверял на Windows 7 SP0, 32-bit).

MsiEnumProducts перечисляет только программы, установленные через
Windows Installer (.msi). Берем что-либо из этого списка:

- Yandex.Браузер (спасибо Dr.Xank за наводку);
- ICQ;
- Firefox;
- Google Chrome.

Все эти программы не используют данную технологию для своих сетапов (косвенно можно
определить по отсутствию в ключе Uninstall значения REG_DWORD WindowsInstaller = 1),
поэтому в списке их не будет. Не поможет ни MsiEnumProductsEx, ни запуск с
elevated-привилегиями, ни "игры" с 32-64 битами.

Так что я был не прав, когда рекомендовал использовать данную функцию,
например здесь:

Копирование списка установленных программ в текстовый файл
Как узнать установлена ли программа на компьютере?

И следует использовать рецепт UI - перечисление содержимого ключей
реестра Software\Microsoft\Windows\CurrentVersio n\Uninstall.
4
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.08.2014, 01:28
Да действительно ничего из указанного в списка не нашел.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
31.08.2014, 11:42
Убежденный,
Спасибо

С++ builder 6 не отображается...
Отображается , слилось как то вчера всё у меня

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


Code
1
msiexec / </uninstall | /x> <Product.msi | Код_продукта> Удаление продукта
1
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
31.08.2014, 18:30  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
И следует использовать рецепт UI - перечисление содержимого ключей
реестра Software\Microsoft\Windows\CurrentVersio n\Uninstall.
Но я там не нашел Yandex.Браузер)))
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
31.08.2014, 22:46
В HKCU загляни.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2014, 22:46

Ошибка при использовании TServerSocket
Здраствуйте, у меня в проекте 2 формы на первой форме есть TServerSocket при отправке текста таким образом ...

Ошибка при использовании ADOConnection
Здравствуйте! Нужна ваша помощь) Щелкаю дважды на ADOConnection1 и, соответственно, нажимаю &quot;Build...&quot;. И тут выскакивает...

Ошибка при использовании экземпляра класса
Всем здравствуйте. Есть класс, суть которого - одна функция записывающая массив вещественных значений в файл с определённым именем (один...

Ошибка при использовании метода Ole Add
При использовании метода OLE Add появляется сообщение об ошибке: Project Project1.exe raised exception class EOleSysError with message 'The...

Ошибка Access Violation при использовании vector внутри класса
Проблема в следующем: имеется пользовательский класс. Три поля в классе - векторы, один из которых двумерный. Первое создание экземпляра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru