I have a 32bit COM object that I want to use with 64bit PHP.
I am trying to follow the tutorial here:
http://www.gfi.com/blog/32bit-object-64bit-environment/
But I am stuck on «Locate your COM object GUID», as I have no idea where I can find out this information.
Does anyone know how I can find the GUID of the COM object?
asked Oct 1, 2013 at 9:40
imperium2335imperium2335
23.2k38 gold badges111 silver badges189 bronze badges
2
You will at least have to know the ProgID of the COM component. Something similar to «Word.Application», the string you pass to the COM() constructor. Run Regedit.exe and look through the HKEY_CLASSES_ROOT for that string. Open the node, the CLSID key’s default value gives you the GUID you are looking for.
answered Oct 1, 2013 at 10:56
Hans PassantHans Passant
918k145 gold badges1681 silver badges2524 bronze badges
1
При обмене данными через COM-соединение, если есть GUID объекта внешней базы, то мы можем получить объект, который в дальнейшем имеем возможность изменить.
СсылкаНаОбъектВИБ = СоединениеИБ.Справочники.Номенклатура.ПолучитьСсылку(СоединениеИБ.NewObject("УникальныйИдентификатор", GUIDИзВнешнейБазы));
ОбъектВИБ = СсылкаНаОбъектВИБ.ПолучитьОбъект();
(Note: Names and GUID have been changed from original values)
While debugging an application, I found that a likely culprit for a bug I had was in a library my application was linking with, in the function
pAgent->raw_Open()
agent
is declared in our C++ code as
XX::IAgentPtr pAgent
All Visual Studio can tell me about IAgentPtr is that its type is
_com_ptr_t<_com_IIID<XX::IAgent,&_GUID_deadbeef_1234_1234_1234_1234deadbeef> >
And my debugger cannot step into the code of agent->raw_Open()
to see what’s going on. I’d like to know which DLL defines XX:IAgent
, as I may be able to get debugging information or source code for that DLL.
I’ve figured out that IAgent
is a COM interface, and through searching elsewhere, I found that I might be able to find the location of the DLL file by looking in the registry (HKEY_CLASSES_ROOTCLSID{guid}). However, I could not find the GUID I’m looking for there.
How might I find the DLL that contains the definition for IAgent
given that I know IAgent
‘s GUID?
(Note: Although they have similar titles, this question is not a duplicate of this question, as the asker of the linked question knows the DLL which defines the interface with the GUID)
23.06.06 — 14:55
Как в COM-соединении выполнить код с ГУИДом?
УИД=Ссылка.УникальныйИдентификатор();
МенеджерОЛЕ=ComСоединение.Справочники.Номенклатура;
СсылкаОЛЕ=МенеджерОЛЕ.ПолучитьСсылку(УИД);
В последней строчке ругается на несоответствие типов (параметр 1)
1 — 23.06.06 — 14:58
Без экспортной функции в OLE базе никак…
2 — 23.06.06 — 15:01
(1) Я фигею дорогая редакция, а методы Выполнить и Вычислить у Com-соединения нету…
3 — 23.06.06 — 15:01
А можно в ком соединении вызвать конструктор УникальныйИдентификатор(«ХХХ-ХХХ»)?
4 — 23.06.06 — 15:01
УИД=Строка(Ссылка.УникальныйИдентификатор()); //
5 — 23.06.06 — 15:02
(3) см. (1)
6 — 23.06.06 — 15:02
ComСоединение.УникальныйИдентификатор(«ХХХ-ХХХ»)?
7 — 23.06.06 — 15:02
(4) ты это к чему?
А запросом можно вытащить ссылку по ГУИДУ в соединенной базе?
8 — 23.06.06 — 15:03
о том, что передать можно только строку
9 — 23.06.06 — 15:05
(6) нет такого метода тоже у ком-соединения.
Можно ли запросом получить ссылку по ее представлению в виде ГУИД?
10 — 23.06.06 — 15:06
мне нельзя менять конфу.
Можно по идее построить индекс всех гуидов справочника базы получателя
11 — 23.06.06 — 15:12
Мне бы зайти в свою ветку
v8: Есть ли шанс через COMСоединение с базой v8 сказать Execute()
и почитать что там наотвечали, да не могу. Почему-то во все ветки попадаю а в эту — сервер перегружен.
А как зайду, расскажу какая идея появилась
12 — 23.06.06 — 15:15
так я не понял у тебя 2 базы и ты по гуиду из 1 базы хочешь найти обьект во второй? они, что братья по разуму
13 — 23.06.06 — 16:19
(12) Чувак, я делаю копию базы… для отладки, секешь???
14 — 23.06.06 — 16:22
они не братья, они КЛОуНЫ!
15 — 23.06.06 — 16:36
тогда XML серелизация
16 — 23.06.06 — 16:45
УИД=Сеть.String(Выборка.Номенклатура.Ссылка.UUID());
СтрокаGUID = Сеть.String(УИД);
НовыйGUID = Сеть.NewObject(«UUID»,СтрокаGUID);
Имя = Тов8.GetRef(НовыйGUID).Наименование;
17 — 23.06.06 — 17:40
(16) йоу, ты настоящий демон! Взлетело! А что это за метод NewObject???
IronDemon
18 — 23.06.06 — 17:50
Система 1С:Предприятие в качестве Automation сервера предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому Automation-сервер 1С:Предприятие в качестве своих методов может иметь: системные процедуры и функции, а также процедуры и функции модуля приложения и общих модулей, объявленные с ключевым словом Экспорт. Кроме того, Automation-сервер 1С:Предприятие имеет два дополнительных метода Connect и NewObject.
NewObject
Синтаксис: NewObject(<Имя>)
Параметры:
<Имя> Строковое выражение, значение которого содержит имя объекта, объявленного в конфигураторе.
Возвращаемое значение:
Ссылка на созданный объект.
Описание:
Метод NewObject создает объект, для которого предусмотрен конструктор, и возвращает ссылку на него.
Пример:
V8 = Новый COMObject(«V8.Application»);
V8.Connect(«File=c:InfoBasesTrade;Usr=Director;»)
ТДокумент = V8.NewObject(«ТекстовыйДокумент»);
ТДокумент.ВставитьСтроку(1, «Новая строка»);
Сообщить(ТДокумент. КоличествоСтрок());
Обновлено 14.04.2021
Добрый день! Уважаемые читатели и подписчики IT блога Pyatilistnik.org. В данной статье я приведу один из методов извлечения цифрового идентификатора приложения из реестра Windows. Правильное название: статистически уникальный 128-битный идентификатор {GUID}. Если Вы знаете {GUID},то можете открыть любой компонент Windows, shell:::{GUID} где — shell — интерпретатор команд Windows. и произвести удаление приложения. Но обо всем по порядку.
GUID — это аббревиатура, которая обозначает глобальный уникальный идентификатор , их также называют UUID или универсальные уникальные идентификаторы — между ними нет реальной разницы. Технически это 128-битные уникальные ссылочные номера, используемые в вычислениях, которые вряд ли будут повторяться при генерировании, несмотря на отсутствие центральных полномочий GUID для обеспечения уникальности.
GUID (глобальный уникальный идентификатор) — это термин, используемый Microsoft для числа, которое ее программа генерирует, чтобы создать уникальную идентичность для объекта, такого как документ Word. Идентификаторы GUID широко используются в продуктах Microsoft для идентификации интерфейсов, наборов реплик, записей и других объектов. Разные виды объектов имеют разные виды GUID — например, база данных Microsoft Access использует 16-байтовое поле для создания уникального идентификатора для репликации.
Типы GUID
Существует 5 версий идентификаторов GUID, определенных в RFC 4122 , каждая с разными свойствами. Чтобы определить версию GUID, просто посмотрите на цифру версии, например, GUID версии 4 имеют формат xxxxxxxx-xxxx- 4 xxx- N xxx-xxxxxxxxxxxx, где N — это одно 5 значений 4, 8,9, A или B.
- Версия 1: дата-время и MAC-адрес — Эта версия генерируется с использованием текущего времени и MAC-адреса клиента. Это означает, что если у вас есть GUID версии 1, вы можете выяснить, когда он был создан, проверив значение метки времени.
- Версия 2: DCE Security — Эта версия специально не определена в RFC 4122, поэтому не должна генерироваться совместимыми генераторами. Он аналогичен GUID версии 1, за исключением того, что первые 4 байта метки времени заменяются пользовательским UID или GID POSIX, а старший байт последовательности часов заменяется доменом UID / GID POSIX.
- Версия 3: MD5 хэш и пространство имен — Этот GUID генерируется путем взятия пространства имен (например, полного доменного имени) и заданного имени, преобразования в байты, объединения и хеширования. После указания специальных битов, таких как версия и вариант, полученные байты затем преобразуются в его шестнадцатеричную форму. Особое свойство этой версии заключается в том, что идентификаторы GUID, сгенерированные из одного и того же имени в одном и том же пространстве имен, будут идентичны, даже если они генерируются в разное время.
- Версия 4: случайная — Этот тип GUID создается с использованием случайных чисел — из 128 битов в GUID 6 зарезервированы для специального использования (версия + вариантные биты), что дает нам 122 бита, которые могут быть заполнены случайным образом. Спецификация не определяет, как должны генерироваться случайные числа, они могут быть любыми, от псевдослучайных до криптографически безопасных, поэтому эти GUID, как и все другие GUID, следует использовать только для идентификации, а не для безопасности.
- Версия 5: SHA-1 хэш и пространство имен — Эта версия идентична версии 3 за исключением того, что SHA-1 используется на этапе хеширования вместо MD5.
Разделы реестра, где нужно искать:
- HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionUninstall
- HKEY_LOCAL_MACHINESOFTWAREWOW6432Node MicrosoftWindowsCurrentVersionUninstall
Как узнать GUID приложения
Пример вызова компонента Windows диспетчер устройств:
shell:::{74246bfc-4c96-11d0-abef-0020af6b0b7a},для запуска необходимо вызвать диалоговое окно «Выполнить» используя клавиши Win + R, прописать данный код и нажать«OK» Все значения {GUID}хранятся в разделе реестра HKEY_CLASSES_ROOTCLSID. Зайдя в CLSID поиск, лучше всего производить методом перебора значений для правильного определения {GUID} в значении должен присутствовать подраздел ShellFolder. Для поиска нужного {GUID} необходимо иметь время и терпение. Итак, всё по порядку.
Как узнать из реестра GUID приложения в Windows -01
Раздел реестра HKEY_CLASSES_ROOTCLSID
Клавишами Win + R открываем диалоговое окно «Выполнить» вводим команду regedit — открыть редактор реестра. Для поиска {GUID} заходим в раздел реестра HKEY_CLASSES_ROOTCLSID
Пример: нам нужен {GUID} «Панели управления — Control Panel», методом перебора значений находим нужный, смотрим наличие подраздела ShellFolder.
Как узнать из реестра GUID приложения в Windows -02
Для того, чтобы извлечь и проверить {GUID} правой клавишей мыши нажимаем на значение, в открывшемся меню выбираем пункт «Экспортировать», и сохраняем с расширением .reg
Как узнать из реестра GUID приложения в Windows -03
Созданный файл реестра лучше всего открыть программой Notepad ++ познакомиться с которой можно в категории сайта «Офис».Если Вам понравился текстовой редактор Notepad ++ и Вы его установили, то правой клавишей мыши нажимаем на созданный файл реестра. В открывшемся меню выбираем «открыть с помощью Notepad ++ таким образом можно ознакомиться со структурой и синтаксисом файла реестра.
Как узнать из реестра GUID приложения в Windows -04
Выделяем значение, с помощью клавиш Ctrl + C копируем, вызываем диалоговое окно «Выполнить» и с помощью клавиш Ctrl + V вставляем, перед фигурными скобками прописываем Shell::: и нажимаем«OK».
Как узнать из реестра GUID приложения в Windows -05
Как узнать GUID через PowerShell
Для того, чтобы вы могли быстро извлечь информацию, о GUID ,я могу вам предложить небольшой скрипт:
$UninstallKeys = «HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall», «HKLM:SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall»
$null = New-PSDrive -Name HKA -PSProvider Registry -Root Registry::HKEY_USERS
$UninstallKeys += Get-ChildItem HKU: -ErrorAction SilentlyContinue | Where-Object { $_.Name -match ‘S-d-d+-(d+-){1,14}d+$’ } | ForEach-Object { «HKU:$($_.PSChildName)SoftwareMicrosoftWindowsCurrentVersionUninstall» }
foreach ($UninstallKey in $UninstallKeys) {
Get-ChildItem -Path $UninstallKey -ErrorAction SilentlyContinue | Where {$_.PSChildName -match ‘^{[A-Z0-9]{8}-([A-Z0-9]{4}-){3}[A-Z0-9]{12}}$’} | Select-Object @{n=’GUID’;e={$_.PSChildName}}, @{n=’Name’; e={$_.GetValue(‘DisplayName’)}}
}
Еще один вариант воспользоваться вот такой конструкцией:
get—wmiobject Win32_Product | sort—object —property Name | Format—Table IdentifyingNumber, Name, LocalPackage —AutoSize
Тут мы еще вывели пути расположения MSI пакетов для удаления приложения и его ремонту.
Как узнать GUID через CMD
Откройте cmd от имени администратора и выполните команду, которая создаст на диске C: файл с отчетом
wmic product get > C:InstalledPrograms.txt
или без создания файла wmic product list
Если Вы сделали всё правильно, то откроется компонент Windows. Желаю удачи, и будьте внимательны при работе с реестром Windows. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.