添加dll自定义操作以通过wix创建的合并模块安装shield限制版项目

时间:2013-07-31 14:05:28

标签: .net wix installshield setup-project orca

我创建了这个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

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

1 个答案:

答案 0 :(得分:1)

您的故障排除应首先捕获详细日志,然后将其读取以查找错误。

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

我猜你是否添加了Impersonate =“no”属性并将Return attribte更改为“check”,你会得到更好的结果。

我一直使用带有InstallShield Limited Edition的WiX合并模块。我建议阅读以下内容:

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

Installation Collaboration Workflows using Free Tools