Что такое сжатый GUID и почему он используется? - PullRequest
0 голосов
/ 06 июня 2018

Я знаю, что в Windows GUID используется установщиком Windows для проверки уже установленных продуктов в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\, а другая информация, относящаяся к продукту, хранится с использованием сжатого GUID в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\.

Тем не менее, поиск в Google, чтобы выяснить, что такое сжатый GUID на самом деле и почему обе формы используются для сохранения данных о продукте в базе данных реестра, выявил только алгоритмы для преобразования из одной формы в другую.

По-видимому, сжатый GUID рассчитывается на основе простого изменения порядка символов определенным образом, что дает мне больше путаницы в отношении того, почему это сжатая форма и почему она используется таким образом.

Кроме того, появляются некоторые источникиссылаться на GUID как на код продукта программного продукта, а другие специально используют термин код продукта в качестве синонима для сжатого GUID.

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Упакованный guid используется для экономии места в реестре.Он используется для идентификаторов компонентов, поэтому, как только вы начнете получать миллион компонентов в системе, я предполагаю, что они беспокоятся об использовании дополнительного пространства.Также возможно, что он использовался, чтобы запретить людям, просматривающим реестр, искать элементы установщика Windows вместо использования API.Это недокументированная деталь реализации, и если слишком много людей привыкнут использовать реестр вместо API, возникнут проблемы, если эта реализация изменится.Поэтому воспринимайте это как интересную информацию, а не что-то, что можно использовать в приложении.

Дескрипторы Дарвина отличаются - это всего лишь кодировка кода продукта, идентификатора компонента и имени функции.Они встречаются в разных местах, где эта комбинация данных полезна для загрузки COM-серверов, запуска программ и т. Д. Опять же, это не документировано, но если вы хотите распутать их, вы можете загрузить LoadLibrary на msi.dll и найти и вызвать MsiDecomposeDescriptorW с правильными параметрами.

0 голосов
/ 06 июня 2018

Не уверен, что вы делаете, или почему это проблема для вашего сценария.Однако упомянутые вами GUID - переставленные GUID с удаленными скобками и тире - на самом деле называются Packed GUIDs.Также существуют Compressed GUIDs длиной всего 23 символа, которые в основном используются для создания дескрипторов Дарвина , которые представляют собой комбинации GUID кода продукта, имени функции и GUID кода компонента.Они используются для рекламных функций MSI.Это согласно книге Боба Бейкера « Начало работы с установками InstallShield Developer и Windows Installer ».

Насколько я помню, упакованные GUID , очевидно, используются для сделать поиск в реестре более эффективным .Я не знаю точных технических деталей.Возможно, Боб или Роб из WiX могут уточнить.

Мне нужно бежать, на самом деле я не отвечу, я еще посмотрю это позже. Пожалуйста, уточните свой вопрос с более подробной информацией о том, что на самом деле является проблемой .В качестве резюме кажется, что коллективные комментарии предполагают, что эта концепция GUID связана с экономией места в реестре, эффективностью поиска и запутыванием.

Мой совет (если я правильно понимаю): не пытайтесь считывать упакованные или сжатые GUID из реестра напрямую - скорее пройдите через MSI API (* 1023)* / Win32) - который должен иметь функции, которые вам необходимы для работы с MSI.


Некоторые ссылки :

Ссылки MSI API (довольно похожие ссылки):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...