MSi软件包在维修期间被卸载

时间:2016-11-17 05:39:10

标签: wix bootstrapper

在刻录UI中插入一个复选框,用于设置变量并作为InstallCondition的条件元素。通过安装检查的特定包,它工作正常。但在修复期间,这种情况变得虚假,而不是重新安装软件包,它正在卸载它们。以下是我使用的方式,Component_1是由复选框设置的变量。

<MsiPackage SourceFile="DevKit.msi"
                Vital="no"
                Compressed="yes"
                InstallCondition="Component_1"
                Visible="yes"/>

我需要一个适当的InstallCondition方法,它在安装,修复和卸载过程中都能正常工作。

1 个答案:

答案 0 :(得分:0)

在修复模式下运行时,条件不会变为false。相反,它没有被设置为任何被解释为使InstallCondition失败的东西。

您需要实施一种方法来记住&#39;是否安装了产品。

您可以通过永久的方式执行此操作,这需要您修改引导程序应用程序代码,或者您可以使用更容易实现的显式方式来执行此操作。

显式方法只是在&#34; exists&#34;上设置Component_1属性。注册表搜索。

您的DevKit.msi安装程序应编写某种注册表项以指示它已安装。您可以对此已知注册表项执行注册表搜索,以获取Component_1的默认值

<util:RegistrySearch
  Id="DevKitInstalled"
  Root="HKLM"
  Key="SOFTWARE\DevKit"
  Format="raw"
  Value="Installed"
  Result="exists"
  Variable="Component_1"/>

您可能需要制作InstallCondition Component_1 = 1,但我对此并不十分肯定。

更永久的解决方法是编辑OnDetectPackageComplete以将相关条件变量设置为1.我建议您为所有msi包提供一个Id,并使用与Id同名的Properties,以便您知道如果有一个与OnDetectPackageComplete传入的PackageId同名的变量,你应该将它设置为1。

可能还有更好的解决方案,也许其他人可以提供不同答案的见解=]