【问题标题】:Equivalent implementation of Committed, OnAfterInstall, OnBeforeUninstall, OnBeforeInstall in Wix custom actionWix 自定义操作中 Committed、OnAfterInstall、OnBeforeUninstall、OnBeforeInstall 的等效实现
【发布时间】:2017-10-23 11:43:46
【问题描述】:

我正在将旧的 Windows 安装项目迁移到 wix 安装程序。 在我的旧 InstallerClass 上,我有四个事件 Committed,OnAfterInstall、OnBeforeUninstall、OnBeforeInstall

虽然我从 Wix 自定义操作中找到了 here, 我认为它只提供 After 和 Before。

如何将旧的安装程序类代码映射到四个单独的自定义操作?

【问题讨论】:

    标签: c# wix .net-3.5 setup-project


    【解决方案1】:

    Committed 是一个 WiX Execute=Commit 自定义操作。

    所有其他人的名字似乎都提供了选择,但实际上并没有。没有“OnBeforeInstall”事件 - 这是 Visual Studio 内部的东西,它是在调用其他托管代码自定义操作之前调用的自定义操作。在没有等效物的 WiX 中它是毫无意义的。无论如何,它不是在安装之前。这与在 StartServices 操作之后调用 WiX 延迟自定义操作相同。

    OnAfterInstall 也是如此。它与在 StartServices 和任何其他自定义操作之后调用的 WiX 延迟自定义操作相同。

    OnBeforeUninstall 也是 Visual Studio 的一个奇怪之处,它与在 StopServices 之前调用延迟自定义操作相同。

    所有 Visual Studio 自定义操作都在 InstallExecuteSequence 中并且具有 impersonate=no。

    Visual Studio 隐藏的另一件事是,它们在内部取决于正在安装和卸载的组件(大部分时间),因此您需要了解条件以及即时/延迟/模拟的条件,这些条件对您隐藏视觉工作室。

    使用 Visual Studio 生成 MSI 文件后,您可以使用 Orca(来自 Windows SDK/Kit)打开 MSI 文件并查看 InstallExecuteSequence 表,单击序列以按实际顺序进行排序。除了标准操作,您还会看到自定义操作、调用时间、类型和条件。它们在 CustomAction 表中定义。

    话虽如此,但它们不会起作用,因为 Visual Studio 隐藏的另一件事是提供奇怪调用环境的 C++ Dll 基础结构。 WiX 中的托管代码自定义操作与 VS 托管代码自定义操作不同,因此您需要将代码迁移到 WiX 模型。这里的例子:

    https://www.codeproject.com/Articles/511653/Using-WIX-with-Managed-Custom-Action

    https://blogs.msdn.microsoft.com/jschaffe/2012/10/23/creating-wix-custom-actions-in-c-and-passing-parameters/

    【讨论】:

    • 感谢 PhilDW。我正在关注相同的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多