Я уже прошел:
Проверьте, установлено ли приложение уже
Обнаружение, если программа уже установлена с NSIS
http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs
Мои вопросы немного больше подробно и немного более общие.
Так, поскольку Вы поняли, что моя проблема состоит в том, что я хочу проверить, установлены ли "Определенные Приложения" уже на машине пользователя? Я генерирую установщик с помощью Усовершенствованного Установщика.
Первые несколько вопросов:
Upgrade Code
? Усовершенствованный установщик имеет опцию, Версия продукта (определите Кодом Обновления),Product Code
? Усовершенствованная Версия продукта установщика (определяют Кодом продукта),GUID
. Что такое GUID?Все вышеупомянутые три имеют значения как это:
{49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3} я не знаю то, что эти значения всего лишь, кажется, что компьютер распознает программное обеспечение с помощью этого вида странного идентификатора.
Мои необходимые приложения
Одно то, что я обнаружил, является Кодом Обновления, и Код продукта может быть извлечен из его "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 позволяет приложениям различных версий быть установленными рядом.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) = ????
Наблюдения от вышеупомянутых данных:
ProductCode
поскольку все различные версии - то же здесь. Это снова противоречит моему выше наблюдений.Теперь,
ProductCode
& UpgradeCode
& GUID
. 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: