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

时间:2015-07-23 21:18:31

标签: c# wix installer custom-action wix3.7

我在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的引导程序,但是&#34;开始CustomAction1&#34;字符串不在日志文件中。我想也许它不是正确记录,但是当我用Orca.exe查看生成的msi时,我看到我的自定义操作没有在CustomActions表或InstallExecuteSequence表下安排

我有什么东西在这里失踪吗?我还猜测CustomActions.CA.dll的路径是不正确的,并尝试硬编码DLL的路径,但这也不起作用。非常感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:3)

啊,我的自定义操作元素位于主要的Product.wxs文件中,但是位于不同的片段中,并且该片段未被引用到任何地方。我在Fragment下面放了一个ComponentGroup,并在Feature元素下引用了它的ID - 它起作用了。道歉。