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=""[#fil713F8F6A7BC9B98857D779B9B29873E1]" /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 可能会给您一些提示,告诉您如何测试自定义操作的直接和回滚行为.
我的 MSI 安装程序中嵌入了一个 .exe,我想在 'InstallFiles' 操作发生之前以某种方式直接从安装程序调用它。
定义如下:
<CustomAction Id="LaunchInstallManager_TryUninstall" Return="ignore" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand=""[#fil713F8F6A7BC9B98857D779B9B29873E1]" /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 可能会给您一些提示,告诉您如何测试自定义操作的直接和回滚行为.