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
阶段开始。
我在安装阶段需要判断用户是否安装了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
阶段开始。