这个问题,其实是为了避免一个我不会解决的问题
当我安装一次产品并再次使用 MSI 时,会执行卸载过程。
但是,这并不能清除注册表中的残留信息,必须使用“Windows Installer Clean Up”进行清理,并且重新安装时会出现注册表权限问题。
我看到了检查老歌,但是发现FindRelatedProducts只在第一次安装时执行,即当我再次安装MSI时,FindRelatedProducts没有执行。
<Upgrade Id='YOURGUID-7349-453F-94F6-BCB5110BA4FD'>
<UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
Minimum='1.0.1' IncludeMinimum='yes'
Maximum='1.0.1' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
Minimum='1.0.1' IncludeMinimum='no' />
</Upgrade>
<CustomAction Id='AlreadyUpdated' Error='Foobar 1.0 has already been updated to 1.0.1 or newer.' />
<InstallExecuteSequence>
<Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
<Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
</InstallExecuteSequence>
所以想请教一下大家
安装后每次运行 MSI 时如何检查?是否已安装且版本相同,如果已安装相同版本,则退出安装过程。
当您再次运行“相同”的 MSI 时,它会进入维护模式,通常只是修复。 Windows 甚至不需要使用您用于此“安装”的 MSI,因为它使用原始 MSI 进行安装,该安装可能是也可能不是您尝试再次安装的 MSI。因此,不清楚您所说的“卸载过程”是什么意思,也不清楚您期望运行相同的 MSI 实际执行的操作。
FindRelatedProducts 用于重大升级,但这意味着增加 ProductVersion 并更改 ProductCode。运行相同的 MSI 不会导致主要升级(请参阅 WiX MajorUpgrade 元素)。
那么,当您再次运行相同的 MSI 时,您预计会发生什么?您似乎没有卸载它,因此它将使用原始 MSI 文件进入维护模式,因此您无法更改该行为,因为它嵌入在已安装产品的 MSI 中。由于您显然没有卸载已安装的产品,因此它不会删除其注册表项。如果事实上该产品没有被卸载,您应该说明这些残留注册表项是什么以及为什么它们是残留的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)