在刻录UI中插入一个复选框,用于设置变量并作为InstallCondition的条件元素。通过安装检查的特定包,它工作正常。但在修复期间,这种情况变得虚假,而不是重新安装软件包,它正在卸载它们。以下是我使用的方式,Component_1是由复选框设置的变量。
<MsiPackage SourceFile="DevKit.msi"
Vital="no"
Compressed="yes"
InstallCondition="Component_1"
Visible="yes"/>
我需要一个适当的InstallCondition方法,它在安装,修复和卸载过程中都能正常工作。
答案 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。
可能还有更好的解决方案,也许其他人可以提供不同答案的见解=]