1

我创建了这个 wix 合并模块项目并向其添加了一个 dll 自定义操作:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Module Id="MergeModule1" Language="1033" Version="1.0.0.0">
    <Package Id="cffa568e-1bf0-4eb3-bee3-eb5801a0bbd0" Manufacturer="Microsoft" InstallerVersion="200" />

    <Binary Id="myCustomActionsDLL" SourceFile="CustomAction1.CA.dll" />

    <CustomAction
    Id="CA_myCustomAction"
    BinaryKey="myCustomActionsDLL"
    DllEntry="CustomAction1"
    Execute="deferred"
    Return="asyncWait" />

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

  </Module>
</Wix>

在我的 InstallShield Limited Edition 安装项目中,我单击Redistributables然后浏览到 MergeModule1.msm 文件并添加它。

当我运行创建的 MSI 时,它安装成功,但似乎自定义操作没有运行,因为我没有看到文件c:\test.txt

[CustomAction]
        public static ActionResult CustomAction1(Session session)
        {
            File.WriteAllText(@"c:\test.txt", session.GetTargetPath("") + "-----" + session.GetSourcePath(""));

            return ActionResult.Failure;
        }

当我打开在 ORCA 中创建的 MSI 文件时,我可以看到表Custom Action中存在InstallExecuteSequence

它没有被执行的原因是什么?

4

1 回答 1

1

您的故障排除应从捕获详细日志开始,然后读取它以查找错误。

msiexec /I foo.msi /l*v install.log

我猜如果您添加 Impersonate="no" 属性并将 Return 属性更改为“check”,您将获得更好的结果。

我一直将 WiX 合并模块与 InstallShield Limited Edition 一起使用。我建议阅读以下内容:

Windows Installer 中自定义操作的安装阶段和脚本内执行选项

使用免费工具的安装协作工作流程

于 2013-07-31T15:06:32.583 回答