WiX - 带有安装和卸载(或回滚)参数的多个自定义操作

Posted

技术标签:

【中文标题】WiX - 带有安装和卸载(或回滚)参数的多个自定义操作【英文标题】:WiX - Multiple Custom Actions with Parameters on Install and Uninstall (or Rollback) 【发布时间】:2015-04-18 17:49:00 【问题描述】:

使用 VS 2013,我有一个旧的 Windows Installer 项目,我正在将其转换为 WiX。我已经完成了 90% 的 WiX 项目,并显示了相应的对话框,并且所有文件都复制到了相应的位置。但是,我的最后一项任务是转换旧 Windows Installer 项目中安装、提交、回滚和卸载部分下定义的自定义操作。

我一直在查看来自 WixToolset Site 的代码,但我很困惑,因为我不知道 WixShellExecTarget 属性如何与 CustomAction 相关联(因为它没有引用该 ID 值)并且我'我不确定如何传入参数。另外,我不希望这些操作基于对话框中的复选框...它们应该始终运行。

基本上,不使用对话框复选框(我“认为”可以通过使用 InstallExecuteSequence 部分而不是 UI\Publish 部分来实现),在安装(或提交)时,我需要以下运行顺序:

[INSTALLFOLDER]RegisterExtensionDotNet20.exe -i "[INSTALLFOLDER]MyNamespaceExtension.dll"
[INSTALLFOLDER]MyApplication.exe

然后,在卸载(或回滚)时,在从文件夹中删除文件之前,我只需要运行以下命令(注意参数从“-i”更改为“-你"):

[INSTALLFOLDER]RegisterExtensionDotNet20.exe -u "[INSTALLFOLDER]MyNamespaceExtension.dll"

这是我的代码片段(仅用于第一个操作...我还没有弄清楚如何命名第二个操作以运行 MyApplication.exe),但它似乎在安装时没有运行(我还没有弄清楚卸载部分)。

<Product>

  <!-- UI, Properties, Directories, Components and Features defined here... -->

  <Property Id="WixShellExecTarget" Value="[INSTALLFOLDER]RegisterExtensionDotNet20.exe -i '[INSTALLFOLDER]MyNamespaceExtension.dll'" />

  <CustomAction Id="RegisterDotNetExtensionx64" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

  <InstallExecuteSequence>
    <Custom Action="RegisterDotNetExtension" Before="InstallFinalize" />
  </InstallExecuteSequence>

</Product>

非常感谢任何输入!

【问题讨论】:

【参考方案1】:

假设我已经了解 registerextensionDotnet20.exe,你不需要它。对于程序集注册,请查看 WiX 工具集中的 Heat.exe。这种事:

How to run heat.exe and register a dll in wix

您不需要其他任何东西,无需回滚,无需卸载等,因为这一切都成为 MSI 文件中注册表数据的一部分,自动处理所有内容。

(即使在 VS 设置中,您也应该能够通过将 Dll 的属性设置为 vsdraCOM 的风格来做到这一点。)

【讨论】:

感谢您提供的信息,但 registerextensionDotnet20.exe 是来自 SSWare 的 EZNamespaceExtensions 的程序。它基本上为 MyApplication 使用的虚拟驱动器创建了一个 Windows shell 扩展。要安装扩展,我必须调用他们的 EXE,传入我的 DLL,以便它正确注册它的组件。我不认为 heat.exe 可以取代这个功能。这有意义吗?

以上是关于WiX - 带有安装和卸载(或回滚)参数的多个自定义操作的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义安装位置的 Wix 捆绑卸载包

yum卸载软件以及依赖,回滚事务

如何使用 WiX 和 MSI 进行静默安装和卸载?

如何从包含多个 MSI 的 wix 自定义引导程序包中安装/卸载单个 msi,例如安装项目的添加/删除功能?

带有COM dll和服务的Wix安装程序

无需卸载的 Wix 安装程序升级