Wix 自定义操作中 Committed、OnAfterInstall、OnBeforeUninstall、OnBeforeInstall 的等效实现

Equivalent implementation of Committed, OnAfterInstall, OnBeforeUninstall, OnBeforeInstall in Wix custom action

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

虽然我从 Wix 自定义操作中找到 here, 我认为它只有 After 和 Before 的配置。

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

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

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

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

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

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

Visual Studio 隐藏的另一件事是,它们在内部以正在安装和卸载的组件(大多数情况下)为条件,因此您需要了解条件以及 immediate/deferred/impersonated Visual Studio 对你隐藏了。

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

说了这么多,它们将无法工作,因为 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/