无法将我的 WiX 自定义操作安排到 msi

Posted

技术标签:

【中文标题】无法将我的 WiX 自定义操作安排到 msi【英文标题】:Unable to schedule my WiX Custom Action into the msi 【发布时间】:2015-07-23 21:18:30 【问题描述】:

我在 Visual Studio 中有一个安装程序解决方案,其中包含 C# Windows 应用程序引导程序和两个 msi 项目。我想为两个 msis 之一安排一个自定义操作以在卸载序列期间运行 - 所以我首先将一个 CustomActions 项目添加到同一个解决方案(称为“CustomActions”)中,该解决方案具有定义自定义功能的 CustomAction.cs 文件被安排。这个函数现在应该只是在日志文件中写入一些内容:

namespace CustomActions

    public class CustomActions
    
        [CustomAction]
        public static ActionResult UninstallSecondaryMsi(Session session)
        
            session.Log("Begin CustomAction1");

        /* Search for ProductCode of the secondary msi here; run msiexec to uninstall it */

            return ActionResult.Success;
        
    

我将 CustomActions 项目引用添加到我的 msi 项目中,然后将以下内容添加到我的 product.wxs 中:

    <!-- Custom Actions -->
    <Fragment>
      <Binary Id="customActionDLL" SourceFile="$(var.CustomActions.TargetDir)\CustomActions.CA.dll" />
      <CustomAction Id="CustomAction_GetRegistryKey"
        BinaryKey="customActionDLL"
        DllEntry="UninstallSecondaryMsi"
        Execute="immediate"
        Return="check" />

    <InstallExecuteSequence>
      <Custom Action="CustomAction_GetRegistryKey"
              After="InstallFinalize"></Custom>
    </InstallExecuteSequence>
  </Fragment>

我运行了触发 msi 的引导程序,但日志文件中没有“Begin CustomAction1”字符串。我想可能不只是正确记录,但是当我使用 Orca.exe 查看生成的 msi 时,我发现我的自定义操作 没有 安排在 CustomActions 表或 InstallExecuteSequence 表下。 p>

这里有什么我遗漏的吗?我还猜测 CustomActions.CA.dll 的路径不正确,并尝试对 DLL 的路径进行硬编码,但这也不起作用。任何帮助将不胜感激,在此先感谢!

【问题讨论】:

【参考方案1】:

啊,我的自定义操作元素在主 Product.wxs 文件中,但在不同的片段中,并且该片段没有在任何地方被引用。我在该 Fragment 下放置了一个 ComponentGroup 并在 Feature 元素下引用了它的 ID - 它起作用了。我很抱歉。

【讨论】:

以上是关于无法将我的 WiX 自定义操作安排到 msi的主要内容,如果未能解决你的问题,请参考以下文章

Wix 自定义卸载操作 - 如何在 msi 删除文件之前运行

如何在自定义操作 DLL (MSI/Wix) 中获取“INSTALLED”属性?

WIX 自定义卸载操作失败

使用组策略部署时 WIX MSI 自定义操作未运行

Wix 的 VC++ 自定义操作

使用Wix在MSI中自定义操作出错时显示最终用户消息