Как найти guid в com

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

imperium2335's user avatar

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 Passant's user avatar

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)

   Гений 1С

23.06.06 — 14:55

Как в COM-соединении выполнить код с ГУИДом?

УИД=Ссылка.УникальныйИдентификатор();

МенеджерОЛЕ=ComСоединение.Справочники.Номенклатура;

СсылкаОЛЕ=МенеджерОЛЕ.ПолучитьСсылку(УИД);

В последней строчке ругается на несоответствие типов (параметр 1)

   Билли Г

1 — 23.06.06 — 14:58

Без экспортной функции в OLE базе никак…

   Гений 1С

2 — 23.06.06 — 15:01

(1) Я фигею дорогая редакция, а методы Выполнить и Вычислить у Com-соединения нету… :(

   Гений 1С

3 — 23.06.06 — 15:01

А можно в ком соединении вызвать конструктор УникальныйИдентификатор(«ХХХ-ХХХ»)?

   vde69

4 — 23.06.06 — 15:01

УИД=Строка(Ссылка.УникальныйИдентификатор()); //

   Билли Г

5 — 23.06.06 — 15:02

(3) см. (1)

   vde69

6 — 23.06.06 — 15:02

ComСоединение.УникальныйИдентификатор(«ХХХ-ХХХ»)?

   Гений 1С

7 — 23.06.06 — 15:02

(4) ты это к чему?

А запросом можно вытащить ссылку по ГУИДУ в соединенной базе?

   vde69

8 — 23.06.06 — 15:03

о том, что передать можно только строку

   Гений 1С

9 — 23.06.06 — 15:05

(6) нет такого метода тоже у ком-соединения.

Можно ли запросом получить ссылку по ее представлению в виде ГУИД?

   Гений 1С

10 — 23.06.06 — 15:06

мне нельзя менять конфу.

Можно по идее построить индекс всех гуидов справочника базы получателя

   Херрес

11 — 23.06.06 — 15:12

Мне бы зайти в свою ветку

v8: Есть ли шанс через COMСоединение с базой v8 сказать Execute()

и почитать что там наотвечали, да не могу. Почему-то во все ветки попадаю а в эту — сервер перегружен.

А как зайду, расскажу какая идея появилась :)

   vde69

12 — 23.06.06 — 15:15

так я не понял у тебя 2 базы и ты по гуиду из 1 базы хочешь найти обьект во второй? они, что братья по разуму :)

   Гений 1С

13 — 23.06.06 — 16:19

(12) Чувак, я делаю копию базы… для отладки, секешь???

   Гений 1С

14 — 23.06.06 — 16:22

они не братья, они КЛОуНЫ!

   vde69

15 — 23.06.06 — 16:36

тогда XML серелизация

   IronDemon

16 — 23.06.06 — 16:45

УИД=Сеть.String(Выборка.Номенклатура.Ссылка.UUID());
СтрокаGUID = Сеть.String(УИД);
НовыйGUID = Сеть.NewObject(«UUID»,СтрокаGUID);
Имя = Тов8.GetRef(НовыйGUID).Наименование;

   Гений 1С

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

как узнать GUID приложенияДобрый день! Уважаемые читатели и подписчики 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

Как узнать из реестра GUID приложения в Windows -01

Раздел реестра HKEY_CLASSES_ROOTCLSID

Клавишами Win + R открываем диалоговое окно «Выполнить» вводим команду regedit — открыть редактор реестра. Для поиска {GUID} заходим в раздел реестра HKEY_CLASSES_ROOTCLSID

Пример: нам нужен {GUID} «Панели управления — Control Panel», методом перебора значений находим нужный, смотрим наличие подраздела ShellFolder.

Как узнать из реестра GUID приложения в Windows -02

Как узнать из реестра GUID приложения в Windows -02

Для того, чтобы извлечь и проверить {GUID} правой клавишей мыши нажимаем на значение, в открывшемся меню выбираем пункт «Экспортировать», и  сохраняем с расширением .reg

Как узнать из реестра GUID приложения в Windows -03

Как узнать из реестра GUID приложения в Windows -03

Созданный файл реестра лучше всего открыть программой Notepad ++ познакомиться с которой можно в категории сайта «Офис».Если Вам понравился текстовой редактор Notepad ++ и Вы его установили, то правой клавишей мыши нажимаем на созданный файл реестра. В открывшемся меню выбираем «открыть с помощью Notepad ++ таким образом можно ознакомиться со структурой и синтаксисом файла реестра.

Как узнать из реестра GUID приложения в Windows -04

Как узнать из реестра GUID приложения в Windows -04

Выделяем значение, с помощью клавиш Ctrl + C копируем, вызываем диалоговое окно «Выполнить» и с помощью клавиш Ctrl + V вставляем, перед фигурными скобками прописываем Shell::: и нажимаем«OK».

Как узнать из реестра GUID приложения в Windows -05

Как узнать из реестра 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’)}}
}

GUID PowerShell

Еще один вариант воспользоваться вот такой конструкцией:

getwmiobject Win32_Product | sortobject property Name | FormatTable IdentifyingNumber, Name, LocalPackage AutoSize

Тут мы еще вывели пути расположения MSI пакетов для удаления приложения и его ремонту.

Powershell поиск guid

Как узнать GUID через CMD

Откройте cmd от имени администратора и выполните команду, которая создаст на диске C: файл с отчетом

wmic product get > C:InstalledPrograms.txt

или без создания файла wmic product list

cmd получить GUID

Если Вы сделали всё правильно, то откроется компонент Windows. Желаю удачи, и будьте внимательны при работе с реестром Windows. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Понравилась статья? Поделить с друзьями:
  • Как найти длину прямоугольника через площадь
  • Как найти отношение в экселе
  • Как быстро найти бабушку
  • Как найти людей по близости в контакте
  • Как найти заключение силлогизма