Wix windows installer如何识别组件已被MSI识别

Wix windows installer如何识别组件已被MSI识别,wix,windows-installer,components,Wix,Windows Installer,Components,我是WIX和MSI的新手,所以首先我尝试了解一些理论背景,但我对这个场景感到困惑-不确定如果 我得到了相同应用程序的2.msi安装包(但版本不同-应该单独安装-我的意思是它们可以安装在一台计算机上而不覆盖旧的),两者都包含具有相同GUID的组件-但安装位置不同(用户可以选择安装路径)-问题是windows installer在安装第二个软件包时将如何反应-WI如何更改组件的引用计数(有一个组件具有一个GUID-但有两个物理资源-文件)-我认为在注册表中应该有组件的COM GUID-但如果文件在多

我是WIX和MSI的新手,所以首先我尝试了解一些理论背景,但我对这个场景感到困惑-不确定如果

我得到了相同应用程序的2.msi安装包(但版本不同-应该单独安装-我的意思是它们可以安装在一台计算机上而不覆盖旧的),两者都包含具有相同GUID的组件-但安装位置不同(用户可以选择安装路径)-问题是windows installer在安装第二个软件包时将如何反应-WI如何更改组件的引用计数(有一个组件具有一个GUID-但有两个物理资源-文件)-我认为在注册表中应该有组件的COM GUID-但如果文件在多个位置被拆分,那么如何有效地将其删除,因为refcount仍然是1,所以如果我同时安装两个软件包并尝试删除第一个软件包,那么由于这个计数,这个组件仍然会得到unistall,对吗

所以,为了避免这种情况并获得完全卸载,我需要更改每个新安装包的组件GUID-使用“*”,这样Windows Installer将以单独的方式计算每个组件的组件数


Petr

Windows Installer将有关已安装产品的元数据保存在HKCR\Installer下的注册表中,并将.MSI缓存在C:\Windows\Installer中。对于正确的行为,您必须遵循“组件规则”

在大多数情况下,当您使用“*”时,WiX将为您生成独特但稳定的GUI。如果您的目标是同时安装同一产品的v1和v2(想想Visual Studio),那么您应该在每个版本中更改目录结构([ProgramFilesFolder]\Company\Application X[ProgramFilesFolder]\Company\Application Y),并分配一个新的升级代码GUID。您可以将组件GUID保留为*,因为WiX将意识到目录路径不同,并为新路径生成新的唯一但稳定的GUID


如果您使用的是静态生成的guid,是的,这些guid都需要更新,因为它们的文件不再代表相同的组件。

谢谢您的回答,我只是想完全理解,如果两个软件包的升级代码相同,但产品代码不同,那么这意味着windows installer可以安装升级吗?第二个问题是安装程序将如何安装升级?通过检查组件GUID,如果相同,则查看文件是否存在(如果未显示,则复制新文件),然后检查每个文件的版本,然后覆盖它?如果我留下了相同的升级代码和相同的产品代码,那么安装程序将如何反应?因此,如果我使用第二个msi运行安装程序,那么升级将不可行?如果升级表中没有条目进行升级,则可以使用相同的升级代码和不同的产品代码并排安装。但是现在你处于一个非常糟糕的位置,如果你想升级v1->v1.1和v2->v2.2,你没有足够的唯一性来只针对你的。因此,v1和v2需要不同的升级代码。有意义吗?我似乎缺少一些概念关系。升级需要什么?在相同的升级代码和不同的产品代码的情况下,升级是如何工作的,以及它与更新表的关系如何?但是现在你处于一个非常糟糕的位置,如果你想升级v1->v1.1和v2->v2.2,你没有足够的唯一性来只针对你的。我也不确定这件事。。。