引导程序操作的顺序
Order of Bootstrapper actions
我有一个带有自定义 UI、1 个 msi 包和一些先决条件的引导程序。我想要做的是在自定义 UI 中检测先决条件,然后覆盖 bundle 元素中的变量之一以安装或不安装先决条件。
所以基本上:
<Variable Name="VCRedist2010SP1_x86" Value="TRUE"/>
<Chain>
<ExePackage Id="VCRedist2010SP1_x86" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="E:\Redist\vcredist_2010_SP1_x86.exe"
DetectCondition="NOT VCRedist2010SP1_x86"/>
...
</Chain>
然后从我的 UI 覆盖 VCRedist2010SP1_x86
变量。
问题是 DetectCondition
的检查发生在我覆盖变量之前。这是日志:
Condition 'NOT VCRedist2010SP1_x86' evaluates to false.
Setting string variable 'VCRedist2010SP1_x86' to value 'FALSE'
问题是它是否可以像这样工作,或者我是否总是必须在 XML 中使用 RegistrySearch 进行检测?
原因是我在这个过程中调用Detect
太早了,我需要稍后调用它并小心它是异步的。我可能需要监听 DetectComplete
事件。
但我更大的问题是没有 Boolean
类型变量。我最终使用了:
<Variable Name="VCRedist2010SP1_x86" Value="0" Type="numeric"/>
然后这样比较:
DetectCondition="VCRedist2010SP1_x86 = 1"
我有一个带有自定义 UI、1 个 msi 包和一些先决条件的引导程序。我想要做的是在自定义 UI 中检测先决条件,然后覆盖 bundle 元素中的变量之一以安装或不安装先决条件。
所以基本上:
<Variable Name="VCRedist2010SP1_x86" Value="TRUE"/>
<Chain>
<ExePackage Id="VCRedist2010SP1_x86" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="E:\Redist\vcredist_2010_SP1_x86.exe"
DetectCondition="NOT VCRedist2010SP1_x86"/>
...
</Chain>
然后从我的 UI 覆盖 VCRedist2010SP1_x86
变量。
问题是 DetectCondition
的检查发生在我覆盖变量之前。这是日志:
Condition 'NOT VCRedist2010SP1_x86' evaluates to false.
Setting string variable 'VCRedist2010SP1_x86' to value 'FALSE'
问题是它是否可以像这样工作,或者我是否总是必须在 XML 中使用 RegistrySearch 进行检测?
原因是我在这个过程中调用Detect
太早了,我需要稍后调用它并小心它是异步的。我可能需要监听 DetectComplete
事件。
但我更大的问题是没有 Boolean
类型变量。我最终使用了:
<Variable Name="VCRedist2010SP1_x86" Value="0" Type="numeric"/>
然后这样比较:
DetectCondition="VCRedist2010SP1_x86 = 1"