【问题标题】:Pass data between deferred custom action在延迟的自定义操作之间传递数据
【发布时间】:2014-12-25 04:57:29
【问题描述】:

我需要将数据从一个延迟的 .NET 自定义操作传递到另一个,但我不知道该怎么做。

延迟的自定义操作无法访问 Windows Installer 会话,因此不能选择会话属性。目标延迟自定义操作已经采用了从较早的即时自定义操作中设置的自定义操作数据,但我似乎无法从源延迟操作中修改它。

我也尝试在自定义操作类上使用静态属性,但正如预期的那样,这也不起作用。

我可以在源操作中写入注册表,然后在目标操作中将其读回,但这似乎有点笨拙。肯定有更标准的方式在延迟的自定义操作之间传递数据吗?

【问题讨论】:

    标签: .net wix windows-installer custom-action


    【解决方案1】:

    是的,好问题。

    当然有一种更标准的方式在 deferred 之间传递数据 自定义操作?

    没有,据我所知,没有这样的标准体系。

    老实说,延迟操作可以通过CustomActionData 读取属性已经是奇迹了——这是在生成执行脚本时通过某种元数据完成的。延迟操作只能访问少数有限的属性,并且它不能与 MSI 数据库交互

    请参阅Obtaining Context Information for Deferred Execution Custom Actions 了解更多信息。不是 WiX 限制,而是 MSI。

    正如您所说,查看临时文件夹或注册表 - 虽然不一定方便或很好 - 如果仔细完成它会很好地工作。

    如果您有兴趣了解有关 MSI 架构的更多信息,这是一个很好的链接:http://bonemanblog.blogspot.co.uk/2005/10/custom-action-tutorial-part-i-custom.html

    【讨论】:

      【解决方案2】:

      故意无法做到这一点,因为这不是设计意图。目的是立即执行所有业务逻辑/数据处理并将指令数据传递给执行实际提升工作/系统更改的延迟自定义操作。

      【讨论】:

        【解决方案3】:

        WiX 在 wcautil.lib 中提供了一个用于执行此操作的本机代码库。见https://github.com/wixtoolset/wix3/blob/develop/src/libs/wcautil/wcascript.cpp。 (我们需要它用于 IIS 自定义操作,因为 IIS 打破了标准用户应该能够读取配置的“规则”,如果不能写入配置。)

        【讨论】:

        • 您能否详细说明如何在我的场景中使用它? (从代码中的几个 cmets 对我来说根本不清楚)
        • 您可以在github.com/wixtoolset/wix3/blob/develop/src/ext/ca/wixca/dll/… 看到它的使用情况。 WcaCaScriptWriteString 和 WcaCaScriptWriteNumber 让您可以像立即自定义操作一样编写自定义操作数据。
        • 啊,我应该提到我的自定义操作是在 .NET 中的。 wcautil 似乎不适用于 .NET。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        相关资源
        最近更新 更多