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

时间:2015-04-18 17:49:00

标签: wix

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

我一直在审核WixToolset Site中的代码,但我感到困惑,因为我不知道WixShellExecTarget属性如何与CustomAction相关联(因为它没有&#39} ; t引用该ID值)并且我不确定如何传入参数。此外,我不希望操作基于对话框中的复选框...它们应始终运行。

基本上,不使用对话框复选框(我认为"可以使用InstallExecuteSequence部分而不是UI\Publish部分完成),安装(或提交) ),我需要以下顺序运行:

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

然后,在从文件夹中删除文件之前卸载(或回滚)时,我只需运行以下命令(请注意&#34中参数的更改; -i&# 34;到" -u"):

[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 个答案:

答案 0 :(得分:0)

假设我已了解registerextensionDotnet20.exe,您就不需要它了。有关装配注册,请查看WiX工具集中的Heat.exe。这种事情:

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

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

(即使在VS设置中,您也可以通过将Dll的属性设置为vsdraCOM的风格来实现此目的。)