是否可以从外部XML文件中包含WIX自定义操作

时间:2014-02-11 12:05:21

标签: xml wix

我有一个WIX安装程序,它使用WXS文件中定义的自定义操作作为安装过程的一部分,以将设置值添加到注册表中。

我正在尝试通过生成用于使用C#app定义自定义操作的XML,将生成的XML保存到多个XML文件中,然后在其中引用这些XML文件,自动将新设置添加到已安装中。 WXS文件使用以下语法

<!DOCTYPE Wix [ 
  <!ENTITY externalCustomActionList SYSTEM "customActionList.xml">
  <!ENTITY ExternalPropertyList SYSTEM "customActionPropertyList.xml">
]>

我通过反复试验发现Visual Studio会在外部XML文件中发现错误并且无法正确编译,所以我知道当我编译并获得构建的安装程序时,XML本身就可以。

问题是在运行安装程序时,外部XML文件中的自定义操作无法执行。

如果我将生成的XML直接粘贴到WXS文件中,则安装程序会正确运行,并且正如我所期望的那样。

是否可以使用外部文件中的XML块以这种方式构建WIX自定义Actions WXS文件?

我想以这种方式构建自定义操作的原因是为了避免在添加新设置时使用我的小C#应用程序更改主要WIX文件。

1 个答案:

答案 0 :(得分:2)

我一直在进行这项工作,并且能够通过为每个片段提供一个虚拟属性并使用Product.wxs文件中的PropertyRef标记,从其他文件中包含WIX XML片段。

我的附加文件的顶部如下:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<Property Id="CustomActionsList" Value="1" />

我添加的任何XML都在Fragment definited内部,然后在Product.wxs中引用属性时将其包含在WiX安装程序中,如下所示:

<PropertyRef Id="CustomActionsList"/>

这使我能够将自动生成的XML拉入我的WIX安装程序。

我也能够以相同的方式添加组件,但使用ComponentComponentRef以及PropertyPropertyRef

的{{1}}