【问题标题】:Is it possible to include WIX Custom Actions from external XML file是否可以从外部 XML 文件中包含 WIX 自定义操作
【发布时间】:2014-02-11 12:05:21
【问题描述】:

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

我正在尝试通过生成用于使用 C# 应用程序定义自定义操作的 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 文件。

【问题讨论】:

  • 编译的 WXS 文件中的声明在链接时没有任何效果,除非它们在 Product 或 Merge 元素中被引用。那么,你在粘贴什么?
  • 我一直在做进一步的工作,并且能够通过为每个片段提供一个虚拟属性并使用 Product.wxs 文件中的 PropertyRef 标记来包含来自其他文件的 WIX XML 片段。这给了我能够将自动生成的 XML 拉入我的 WIX 安装程序的预期效果。

标签: xml wix


【解决方案1】:

我一直在做进一步的工作,并且能够通过为每个片段提供一个虚拟属性并在 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 都在定义的片段中,然后在 Product.wxs 中引用属性时将其包含在 WiX 安装程序中,如下所示:

<PropertyRef Id="CustomActionsList"/>

这给了我能够将自动生成的 XML 引入我的 WIX 安装程序的预期效果。

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

【讨论】:

  • 很高兴你能成功。 WiX 的早期版本有一个FragmentRef。您对PropertyRef 的使用似乎是试图恢复该功能。我会使用&lt;?include CustomActionSequences.wxi ?&gt; 或直接放入序列元素。看到这个question
猜你喜欢
  • 2014-07-11
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
相关资源
最近更新 更多