【发布时间】:2011-02-15 04:38:58
【问题描述】:
我已经通过了:
Check if the application is already installed
Detecting if a program is already installed with 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} 我不知道这些值是什么,但似乎计算机正在使用这种奇怪的 ID 识别软件。
我需要的应用程序是
- MySQL 数据库管理系统
- MySQL .NET 连接器
我发现的一个事实是升级代码和产品代码可以从它的“msi 安装程序”中提取。所以,我从安装程序和注册表中提取了这些值。
MySQL 服务器
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) = ????
以上数据观察:
- 令人惊讶的是,它无法从 mysql.data.*.msi 的安装程序中找到 UpgradeCode。我想知道为什么?这与我的上述观察相矛盾。
-
所有不同版本的
ProductCode在这里都是相同的。这再次与我的上述观察相矛盾。 - 我仍然不知道如何找到 GUID。
现在,
- 这些
ProductCode&UpgradeCode&GUID到底是什么。 - 代表什么?
- 为什么上述观察结果相互矛盾?
- 我不关心版本。 我不想依赖应用程序名称那么我如何检查 MySQL 驱动程序和 MySQL ADO .NET。
- 如果它们是 .NET 程序集,检测会变得简单吗?那怎么办?我不想将程序集与我部署的文件一起发送。
【问题讨论】:
标签: .net installation windows-installer nsis advanced-installer