我已经经历过:
我的问题不够深入,也不够笼统。
因此,正如您所理解的,我的问题是我想检查“某些应用程序”是否已经安装在用户的计算机上?我正在使用高级安装程序生成安装程序。
前几个问题:
Upgrade Code
是什么?高级安装程序有选项,产品版本(通过升级代码标识)Product Code
是什么?高级安装程序产品版本(按产品代码标识)GUID
。什么是GUID?上述三种方法都有这样的值:
{49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}我不知道这些值是什么,但似乎计算机正在用这种奇怪的ID识别软件。
我需要的应用程序是
我发现的一个事实是升级代码&产品代码可以从它的"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允许并行安装不同版本的应用程序。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
到底是什么?发布于 2010-05-03 22:10:04
UpgradeCode表示具有不同版本的产品。
ProductCode表示产品的一个版本。
例如,理论上Microsoft 2003有一个ProductCode,Word 2007有一个不同的。但是,Word 2003和2007将共享相同的UpgradeCode,因为您可以从一个升级到另一个。
GUID简单地表示全局唯一标识符。这是一大串数字和字母,在这个星球上应该是独一无二的。
UpgradeCodes和ProductCodes保存在注册表中,但是它们是隐藏和加密的,您需要使用工具来查询它们。例如:
MsiGetProductInfo(ProductCode, INSTALLPROPERTY_VERSIONSTRING, lpVerName, &cchVerName);
MsiEnumRelatedProducts(UpgradeCode, 0, 0, ProductCode);
要检查和查看产品是否已经安装在用户的计算机上,您可以使用上面提到的MsiEnumRelatedProducts()。我认为你要求的不仅仅是在StackOverflow回答中所能回答的问题。考虑更多地研究MSI:
发布于 2013-08-06 22:13:02
ProductCode和UpgradeCode GUID标识您的软件。连同第三个代码,PackageCode。
当然,除了上述清洁API方法之外,还可以在注册表中检测到这些代码。在一些地方,它们有一点点“改变”--这是真的,但这不是加密,只是数字重新排序,例如在HKCR\Installer.下很容易破译,我认为网络中的任何地方都有示例代码。10艘左右的班轮。
以“未加密”的方式,您可以在这里找到已安装软件的ProductCode:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(但请注意,64位机器上还有另外两个用户专用和32位WOW软件的键)。
不建议使用其代码检测应用程序,因为在更新的情况下,这些代码可能会更改。如果使用一个,UpgradeCode会更安全,因为它变化较少,但不够安全。查找包含公司名称和软件版本的注册表路径!
更多知识:
ProductCode是MSI设置的主要标识。这些代码(ProductCode、UpgradeCode)用于设置作者的经验规则如下:
https://stackoverflow.com/questions/2760849
复制相似问题