Wix自定义操作

时间:2017-10-23 11:43:46

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

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

从Wix自定义操作中我发现here, 我认为它只提供After和Before。

如何将旧的Installer类代码映射到四个单独的自定义操作中?

1 个答案:

答案 0 :(得分: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/