可以从设置库导入WiX自定义操作还是有另一种方法可以实现相同的功能?

时间:2014-02-10 20:52:35

标签: wix installer custom-action

我有一个由4个不同的安装库组成的程序。我想要做的是完全划分这些库,以便我可以轻松地重用它们或根据安装的内容限制程序的功能。目前,我的所有自定义操作都在安装程序本身内声明。我希望这些自定义操作驻留在各自的安装库中,并在installexecutesequence中指定它们。这是WiX可能实现的吗?到目前为止,这是我试图无济于事的。

项目A SetupLibrary

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
    <?if $(var.Platform) = x86?>*See note
        <CustomAction Id="MyCustomAction" FileKey="Somefile.exe" Execute="deferred" ExeCommand="CmdLineArgs" Return="check"/>
        <InstallExecuteSequence>
            <Custom Action="MyCustomAction" After="StartServices"/>
        </InstallExecuteSequence>
    <?endif ?>
    </Fragment>
</Wix>

* 我有这个条件阻止此自定义操作在我的主项目中生成两次,因为我导入了此安装程序库的32位和64位版本。

使用上面的方法,我的项目编译得很好,但在编译时无法在MSI的自定义操作表中找到自定义操作。如果我在安装程序中的InstallExecuteSequence中明确列出自定义操作,它可以正常工作,但这会使我的最终目标失败,即将所有这些组件都包含在自己的安装库中。

2 个答案:

答案 0 :(得分:0)

不,你总是需要在Product元素下添加某种创作来从其他任何地方引入声明,包括Fragment甚至在同一个文件中。在这种情况下,创作将是InstallExecuteSequence/Custom/@Action引用。

至少有三种方法可以避免将该元素的文本直接放入您的安装项目代码中:

  1. 预处理器<?include ../ProjectA/libraryA.wxi ?>,这需要绝对路径或相对路径
  2. 自定义元素,在扩展程序中实现
  3. 合并模块参考
  4. 扩展似乎有点矫枉过正。如果可以,我会使用包含。

答案 1 :(得分:0)

如果您想将其分开以用于非WiX安装,您可以将其构建为合并模块。