我已经经历了:
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 .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 程序集,检测会变得简单吗?那怎么办?我不想将程序集与我部署的文件一起发送。