在对话框级别上有条件地在WIX片段中定义属性

时间:2016-05-04 19:37:29

标签: .net windows wix windows-installer

在这里,您可以看到Control in Dialog,它有条件地发布属性。但是在显示对话框时需要可以访问属性,因为其他控件 - 例如TextBoxes使用它们。

如何在不弄乱之前对话框的按钮的情况下实现这一目标?

    <UI Id="IdOfUI">
        <Dialog Id="IdOfDialog">
            <Control Id="IdOfControl" Type="PushButton" >
              <Publish Property="PROP" Value="1" Order="1"><![CDATA[PROP2 <> ""]]></Publish>
              <Publish Property="PROP" Value="2" Order="1"><![CDATA[PROP2 = ""]]></Publish>
              <Publish Property="PROP" Value="3" Order="1"><![CDATA[PROP2 = "" AND PROP3 = ""]]></Publish>
              ...
            </Control>
        </Dialog>
    <UI>

最后,我能够使用内置的 SetProperty CustomAction 来解决它,它修改了 InstallExecuteSequence InstallUISequence 引擎盖下。

  

工具Orca非常有用 - 它以msi

显示结果序列
<Fragment>
    <Property Id="PROP1" />
    <Property Id="PROP2" />

    <SetProperty Id="PROP1" Action="SetPROP1_0" After='AppSearch' Value="VALUE1" ><![CDATA[PROP1 <> ""]]></SetProperty>
    <SetProperty Id="PROP1" Action="SetPROP1_1" After='AppSearch' Value="[VALUE2]"><![CDATA[PROP1 = "" AND VALUE2 <> ""]]></SetProperty>
    <SetProperty Id="PROP2" Action="SetPROP2_1" After='SetPROP1_0' Value="[PROP1]"></SetProperty>

2 个答案:

答案 0 :(得分:1)

你做不到。意思是,你必须提前设置属性(可能在那些“以前的对话框”中),在Windows安装程序中没有类似“form.onload”事件。

这是它的禅 - “由最开明的建筑宇航员设计,由最差的程序员实施”(c) - 这当然是一个悲伤的笑话,但部分是真的......一定要真正开悟让我们设计用户使用关系数据库表的接口。

答案 1 :(得分:1)

MSI对话框行为是在您转换到下一个对话框之前发布的范围不在范围内。所以通常的解决方法是将控件分成不同的屏幕。 WiX维护UI(修复,更改,删除)以这种方式工作。他们使用Push按钮发布然后转换到可以使用它们的下一个对话框,而不是使用Radio并停留在同一个屏幕上。然后,您还可以在按钮上放置漂亮的图标,您可以使用无线电选择。