Что такое ProductCode & UpgradeCode & GUID? Как обнаружить, если определенное приложение уже установлено на пользовательской машине?

Я уже прошел:

Проверьте, установлено ли приложение уже

Обнаружение, если программа уже установлена с NSIS

http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs

Мои вопросы немного больше подробно и немного более общие.

Так, поскольку Вы поняли, что моя проблема состоит в том, что я хочу проверить, установлены ли "Определенные Приложения" уже на машине пользователя? Я генерирую установщик с помощью Усовершенствованного Установщика.

Первые несколько вопросов:

  • Что Upgrade Code? Усовершенствованный установщик имеет опцию, Версия продукта (определите Кодом Обновления),
  • Что Product Code? Усовершенствованная Версия продукта установщика (определяют Кодом продукта),
  • Компонент установлен: GUID. Что такое GUID?

Все вышеупомянутые три имеют значения как это:

{49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3} я не знаю то, что эти значения всего лишь, кажется, что компьютер распознает программное обеспечение с помощью этого вида странного идентификатора.

Мои необходимые приложения

  1. MySQL DBMS
  2. MySQL коннектор.NET

Одно то, что я обнаружил, является Кодом Обновления, и Код продукта может быть извлечен из его "msi установщик". Так, я извлек эти значения из установщиков и реестра.

MySQL Server

Installer = mysql-5.1.43-win32.msi 
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {0ECED7D8-FF53-4DC9-958E-C2177F528DE4}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0ECED7D8-FF53-4DC9-958E-C2177F528DE4}

Installer = mysql-5.1.46-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {EA8FDE5A-2B33-4EDD-B7E7-8D179DF731A5}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{EA8FDE5A-2B33-4EDD-B7E7-8D179DF731A5}

Installer = mysql-essential-5.1.46-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {AD33AF2C-6485-4106-B012-1D9CDC88A454}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AD33AF2C-6485-4106-B012-1D9CDC88A454}

Installer = mysql-essential-5.0.89-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {9A4DA7EF-A7B9-4282-90AD-10976AA24E69}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A4DA7EF-A7B9-4282-90AD-10976AA24E69}

Наблюдение от вышеупомянутых данных:

  • UpgradeCode из программного обеспечения является постоянным и независимо от его версии. Но удивительно нет никакого однократного въезда в реестре со значением UpgradeCode
  • ProductCode конкретная версия, и она используется MSI внутренне, который на самом деле разумен потому что. MSI позволяет приложениям различных версий быть установленными рядом.
  • Я не знаю, как найти GUID.

MySQL ADO драйвер.NET

Installer = mysql.data.5.2.5.msi
Upgrade Code = --- 
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????

Installer = mysql.data.6.2.2.msi
Upgrade Code = ---
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????
UninstallPath =HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5FD88490-011C-4DF1-B886-F298D955171B}
Installer =  mysql.data.6.2.3.msi
Upgrade Code = ---
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????

Наблюдения от вышеупомянутых данных:

  • удивительно, это не могло найти UpgradeCode из установщика mysql.data. *.msi. Интересно почему? Это противоречит с моим выше наблюдения.
  • ProductCode поскольку все различные версии - то же здесь. Это снова противоречит моему выше наблюдений.
  • Я все еще не знаю, как найти GUID.

Теперь,

  • Что точно является ими ProductCode & UpgradeCode & GUID.
  • Который обозначает что?
  • Почему выше противоречия наблюдений?
  • Я не забочусь о версиях. Я не хочу зависеть от Имени приложения затем, как я проверяю если драйвер MySQL и MySQL ADO.NET.
  • Обнаружение становится простым, если они - блоки.NET? Как сделать затем? Я не хочу поставлять блоки со своими развернутыми файлами.

9
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

UpgradeCode обозначает продукт с разными версиями.

ProductCode обозначает версию продукта.

Например, теоретически существует один ProductCode для Microsoft Word 2003 и другой для Word 2007. Однако и Word 2003, и 2007 будут использовать один и тот же UpgradeCode, поскольку вы можете перейти с одного на другой.

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

UpgradeCodes и ProductCodes хранятся в реестре, но они скрыты и зашифрованы, и вам понадобится инструмент для их запроса. Например:

MsiGetProductInfo(ProductCode, INSTALLPROPERTY_VERSIONSTRING, lpVerName, &cchVerName);
MsiEnumRelatedProducts(UpgradeCode, 0, 0, ProductCode);

Чтобы проверить, установлен ли уже продукт на машине пользователя, вы можете использовать MsiEnumRelatedProducts (), как указано выше. Я думаю, вы спрашиваете больше, чем можно ответить в ответе StackOverflow. Рассмотрите возможность получения дополнительной информации о MSI:

Раздел MSDN в установщике Windows

13
ответ дан 4 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: