【问题标题】:Can WiX custom actions be imported from a setup library or is there another method to achieve the same functionality?是否可以从设置库中导入 WiX 自定义操作,或者是否有其他方法可以实现相同的功能?
【发布时间】:2014-02-10 20:52:35
【问题描述】:

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

项目 A 安装库

<?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 中明确列出自定义操作,它可以工作,但是这违背了我将所有这些组件包装在它们自己的安装库中的最终目标。

【问题讨论】:

    标签: wix installation custom-action


    【解决方案1】:

    不,您总是必须在Product 元素下添加某种创作才能从其他任何地方提取声明,包括Fragment,即使在同一个文件中也是如此。在这种情况下,创作将是InstallExecuteSequence/Custom/@Action 引用。

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

    1. 预处理器&lt;?include ../ProjectA/libraryA.wxi ?&gt;,需要绝对或相对路径
    2. 在扩展中实现的自定义元素
    3. 合并模块参考

    扩展名似乎有点矫枉过正。如果可以的话,我会使用包含。

    【讨论】:

      【解决方案2】:

      如果您想将其分离出来用于非 WiX 安装,您可以将其构建到合并模块中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        相关资源
        最近更新 更多