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 - 带有安装和卸载(或回滚)参数的多个自定义操作的主要内容,如果未能解决你的问题,请参考以下文章