Что такое ProductCode & UpgradeCode & GUID? Как определить, установлено ли уже определенное приложение / библиотека на компьютере пользователя? - PullRequest
9 голосов
/ 04 мая 2010

Я уже прошел:

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

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

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

Мои вопросы немного глубже и немного более общие.

Итак, как вы поняли, моя проблема в том, что я хочу проверить Приложения "уже установлены на компьютере пользователя? Я создаю установщик, используя Advanced Installer .

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

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

Все три вышеперечисленных имеют такие значения:

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

Мои обязательные заявки

  1. СУБД MySQL
  2. MySQL .NET Connector

Один факт, который я обнаружил, - это код обновления и код продукта, который можно извлечь из его "установщика 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 Driver

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? Как это сделать тогда? Я не хочу отправлять сборки с моими развернутыми файлами.

Ответы [ 2 ]

13 голосов
/ 04 мая 2010

Код 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

3 голосов
/ 07 августа 2013

GUID ProductCode и UpgradeCode идентифицируют ваше программное обеспечение. Вместе с третьим кодом PackageCode.

В дополнение к упомянутому чистому способу API, конечно, можно также обнаружить эти коды в реестре. В некоторых местах они немного «изменены», это правда, но это не шифрование, а только переупорядочение номеров, например, под HKCR \ Installer . Довольно легко расшифровать, и я думаю, что в сети есть пример кода. 10 лайнер или около того.

Незашифрованным способом вы можете найти ProductCode установленного программного обеспечения здесь:

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall
(Но будьте осторожны, есть два других ключа для пользовательского и 32-битного программного обеспечения WOW на 64-битных машинах ).

Не рекомендуется обнаруживать приложения, используя их коды, поскольку они могут измениться в случае обновлений. Если использовать один, UpgradeCode безопаснее, потому что он меняется меньше, но недостаточно безопасно. Ищите пути реестра, содержащие названия компаний и версии вашего программного обеспечения!

Больше знаний:
Код продукта - это основной идентификатор установки MSI. Правила большого пальца для этих кодов (ProductCode, UpgradeCode) для авторов установки:

  1. Не меняйте их, если вы делаете обновление с помощью патча.

  2. Если вы хотите сделать полное обновление, содержащее все файлы, сделайте так называемое Major Upgrade.
    (Есть и другие возможности, но это наиболее удобный вариант, особенно для начинающих). a) Измените код продукта для основных обновлений.

  3. Не меняйте UpgradeCode для ЛЮБОГО обновления, за исключением того, что вы хотите, чтобы новая версия могла быть установлена ​​параллельно старой. В «мышлении» MSI это совершенно новый продукт (более понятный как путь / дерево обновления).

  4. Если вы измените код обновления, всегда меняйте код продукта

  5. Обычно не заботятся о PackageCode. Хороший инструмент для сборки изменяет его при любом построении на случайный новый GUID. Чтобы выполнить тест установки с этой сборкой, может потребоваться сначала удалить старую собранную версию или узнать больше о MSI (здесь: Small / Minor Upgrades).

...