我需要确定用户是否在安装阶段安装了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>
以下是日志摘要。
第86行:MyLog:SQL版本低于最低版本 要求并进入安装SQL步骤。
第87行:MyLog:#IS_INSTALL_SQL#:0
第88行:MyLog:设置属性值
第89行:MyLog:#IS_INSTALL_SQL#:1
第187行:属性(S):IS_INSTALL_SQL = 1
第317行:属性(C):IS_INSTALL_SQL = 0
答案 0 :(得分:0)
您只在InstallExecuteSequence
期间安排在UI阶段之后发生的CA.在两者中提前安排它,包括InstallUISequence
并在AppSearch
之前对其进行排序,然后定义CustomAction
@Execute="firstSequence"
,例如它只运行一次并适当地设置值。虽然您将其定义为公共(包括下划线的所有大写),但请确保在客户端阶段结束且服务器阶段启动时,在您的情况下,其值将重置为其默认值0
。