WIX XMLConfig不同的根元素名称

时间:2015-06-18 09:48:58

标签: wix

我遇到了一个奇怪的问题,我在WIX编写的“配置”msi使用XMLConfig检查,删除然后在单个xml文件中创建新值。

自从我发现了WIX以来,我已经打包了很多我们的手动配置流程,所以这是我的第7次或第8次,所以基本上按照上面的步骤我很自在。

这个特例虽然我遇到了一个奇怪的情况但我不确定如何让WIX理解。

同一个文件可以根据情况更改它的根元素名称

首次安装时:

<DataSet>
    <SomeStuff />
</DataSet>

如果通过已安装的程序“设置”对话框删除或更改

<NewDataSet>
    <SomeStuff />
</NewDataSet>

我正在使用VerifyPath检查删除和添加,但是当xmlconfig的路径不在文件中时,它失败并显示可见错误,因此,即使我为每个方案设置了两组XMLConfig,也会出现明显的错误,这是不可取的

组件片段位于

之下
<Component Id="C_MobileSettings" Guid="" KeyPath="yes">
    <CreateFolder Directory="MOBILEINSTALLLOCATION" />
    <XmlConfig 
        Id="MobileSettings_Key_Delete" 
        Action="delete" 
        ElementPath="//NewDataSet/GeneralSettings" 
        File="[MOBILESETTINGSPATH]" 
        Name="Key" 
        Node="element" 
        On="install" 
        Sequence="1" 
        VerifyPath="//NewDataSet/GeneralSettings/Key"  
        xmlns="http://schemas.microsoft.com/wix/UtilExtension" 
    />
    <XmlConfig 
        Id="MobileSettings_Key_Add" 
        Action="create" 
        ElementPath="//NewDataSet/GeneralSettings" 
        File="[MOBILESETTINGSPATH]" 
        Name="Key" 
        Node="element" 
        On="install" 
        Sequence="1" 
        Value="Product Key"
        xmlns="http://schemas.microsoft.com/wix/UtilExtension" 
    />
</Component>

无论根元素名称的状态如何,此配置msi都需要能够在软件安装后的任何时刻运行。

这可能是直接的WIX还是我必须编写自定义操作?

2 个答案:

答案 0 :(得分:1)

我不相信你需要自定义动作。 XmlConfig::ElementPath是一个XPath,您可以使用|(union)运算符来执行一个影响任一名称的xml节点的操作。

答案 1 :(得分:0)

(代表作者提问)

为了在这里发生的其他人的利益,我是如何使用亚当的伟大建议解决这个问题的:

<util:XmlConfig 
    Id="MobileSettings_Key_Create" 
    Action="create" 
    ElementPath="//(NewDataSet | DataSet)/GeneralSettings/Key" 
    File="[MOBILESETTINGSPATH]" 
    Node="value" 
    On="install" 
    Sequence="1" 
    VerifyPath="//(NewDataSet | DataSet)/GeneralSettings/Key" 
    Value="[PRODUCTKEY]" 
/>

经过一个月的重新包装可怕的第三部分安装程序后,对于SOMETHING这个简单而优雅的解决方案来说,这是一个很好的改变。禅宗的转瞬即逝,但是禅宗也是如此。