我遇到了一个奇怪的问题,我在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还是我必须编写自定义操作?
答案 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这个简单而优雅的解决方案来说,这是一个很好的改变。禅宗的转瞬即逝,但是禅宗也是如此。