WIX 自定义操作中修改的属性在退出对话框中不正确

WIX The properties modified in the custom action are not correct in the exit dialog

我在安装阶段需要判断用户是否安装了SQL,如果用户没有安装,则在退出对话框中显示安装SQL的复选框。 我定义了一个变量叫IS_INSTALL_SQL,初始值为0。在自定义动作中,我会根据注册表判断用户是否安装了SQL,如果没有安装,则IS_INSTALL_SQL 设置为 1。 根据日志,IS_INSTALL_SQL设置为1,但在退出对话框中,该值仍为0,不显示复选框。

下面是代码

[product.wxs]

<Property Id="IS_INSTALL_SQL" Value="0"/>

<Binary Id="myCustomActionsDLL" SourceFile= "$(var.CustomAction1.TargetDir)CustomAction1.CA.dll" />

<CustomAction Id="checkSQLInstallAndVersion" BinaryKey="myCustomActionsDLL" DllEntry="checkSQLInstallAndVersionAction"  Execute="immediate" Return="check"/>


<InstallExecuteSequence>
  <Custom Action="checkSQLInstallAndVersion" Before="InstallValidate">NOT Installed</Custom>
</InstallExecuteSequence>

[ExitDialog.wxs]

<Control Id="InstallSQLCheckBox" 
         Type="CheckBox" 
         X="135" 
         Y="170" 
         Width="220" 
         Height="14" 
         Hidden="yes" 
         Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX_SQL" 
         CheckBoxValue="1" 
         Text="[WIXUI_EXITDIALOGINSTALLSQLTEXT]" >

    <Condition Action="show">
      <![CDATA[IS_INSTALL_SQL = "1" AND NOT Installed]]>
    </Condition>
</Control>

以下是日志片段。

Line 86: MyLog:The SQL version is below the minimum version requirement and enters the installation SQL step.

Line 87: MyLog:#IS_INSTALL_SQL#:0

Line 88: MyLog:Set Property Value

Line 89: MyLog:#IS_INSTALL_SQL#:1

Line 187: Property(S): IS_INSTALL_SQL = 1

Line 317: Property(C): IS_INSTALL_SQL = 0

您只能在 InstallExecuteSequence 期间安排 CA,这发生在 UI 阶段之后。在两者中尽早安排它,包括 InstallUISequence 并将其排序在 AppSearch 之前,然后定义 CustomAction @Execute="firstSequence" 例如它只运行一次并适当地设置值。当您将其定义为 public(包括下划线在内的所有大写字母)时,请确保它不会更改,否则在您的情况下,当客户端阶段结束并且服务器端结束时,其值将重置为其默认值 0阶段开始。