WIX 安装程序 - 可以在“InstallFiles”之前调用自定义操作 .exe 吗?

WIX Installer - Possible to Invoke Custom Action .exe Before `InstallFiles`?

我的 MSI 安装程序中嵌入了一个 .exe,我想在 'InstallFiles' 操作发生之前以某种方式直接从安装程序调用它。

定义如下:

<CustomAction Id="LaunchInstallManager_TryUninstall" Return="ignore" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="&quot;[#fil713F8F6A7BC9B98857D779B9B29873E1]&quot; /someargument"></CustomAction>

<Custom Action="LaunchInstallManager_TryUninstall" Before="InstallFiles">NOT Installed</Custom>

但是在查看日志时,它看起来像是(试图)从安装目的地调用。

有可能吗?

有可能,但方式不同。 'run EXE' 类型的自定义操作将始终在目标系统上搜索可执行文件。因此,如果您的可执行文件与您的应用程序一起安装,则不是一个选项。

这是另一种方式:

  • 首先,将您的 EXE 编写为 <Binary>

    就像<Binary Id="MyEXE" SourceFile="PATH\TO\EXE" />一样简单。

  • 添加一个 DLL 延迟自定义操作,它将提取二进制文件,运行 它带有参数并在之后清理。

    This post can give you an idea how to extract the binary using C# and DTF. Besides, in case you need to pass parameters, make sure you do it the right way for deferred custom action.

最后,请记住每个延迟的自定义操作(即更改目标系统的操作)必须有相应的 rollback action. This article 可能会给您一些提示,告诉您如何测试自定义操作的直接和回滚行为.