无法在MSI中运行Wix自定义操作

时间:2010-04-07 15:19:57

标签: wix windows-installer custom-action

我正在尝试为我的Wix安装创建一个自定义操作,它只是不起作用,我不确定为什么。

这是适当的Wix文件中的位:

<Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" />
<CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" />

以下是我的自定义操作的完整类文件:

using Microsoft.Deployment.WindowsInstaller;

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

      return ActionResult.Success;
    }
  }
}

通过按下UI按钮(暂时)来执行操作:

  <Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" >
      <Publish Event="DoAction" Value="HelperAction">1</Publish>
  </Control>

当我运行MSI时,我在日志中收到此错误:

MSI (c) (08:5C) [10:08:36:978]: Connected to service for CA interface.
MSI (c) (08:4C) [10:08:37:030]: Note: 1: 1723 2: SQLHelperAction 3: CustomAction1 4: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.  Action SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
MSI (c) (08:4C) [10:08:38:501]: Product: SessionWorks :: Judge Edition -- Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.  Action SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 

Action ended 10:08:38: SQLHelperAction. Return value 3.
DEBUG: Error 2896:  Executing action SQLHelperAction failed.
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: SQLHelperAction, , 

它给我的两个错误代码或消息都不足以告诉我什么是错的。或许我只是不明白他们说的是错的。

起初我以为可能是因为我使用的是Wix 3.5,所以为了确保我尝试使用Wix 3.0,但我得到了同样的错误。

关于我做错的任何想法?

7 个答案:

答案 0 :(得分:8)

而不是引用.dll引用.CA.dll,它对我有用。

答案 1 :(得分:7)

对于自定义操作程序集,您需要一个配置文件并将useLegacyV2RuntimeActivationPolicy属性设置为true。确保将配置文件命名为CustomAction.config。如果你不这样做,它将无法正常工作。我假设您正在运行.NET 4 Framework。

有关详细信息,请参阅here。另外,正如AntonyW已经指出的那样,fuslogvw.exe在这种情况下非常有用。

答案 2 :(得分:6)

通过DoAction启动的自定义操作无法写入日志文件。

当我第一次开始使用WiX时,这也让我很困惑。

如果您想了解发生了什么,可以在自定义操作开始时使用System.Diagnostics.Debugger.Launch()。这将提示您将Visual Studio附加到进程,以便您可以对其进行调试。

答案 3 :(得分:1)

将安装程序项目配置/平台设置为debug / x64并将自定义操作项目配置/平台设置为debug / x86时,会出现此错误。

更正平台设置以构建同一平台的项目

在我的情况下,改变平台解决了这个问题。

由于 Yogesh

答案 4 :(得分:1)

还有一个可能的答案 - 您可能已指定了正确的CA DLL,并指定了正确的方法,但如果该方法未使用[CustomAction]进行修饰,您将收到该错误。

答案 5 :(得分:0)

对我来说,这是我的CustomAction DllEntry与我的方法名称不匹配。即。

<CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" />

public static ActionResult CheckPID(Session session)

答案 6 :(得分:0)

您是否尝试更改自定义操作DLL上的运行时库设置?调试模式选项/ MDd和/ MtD特别需要C ++运行时的调试版本,这些版本在生产机器上不可用(它们没有可再发行的许可证)。如果使用/ MD编译器选项,则可能还需要在用户的计算机上安装所需的Visual Studio C ++运行时版本,并且有一个合并模块:C++ Redistributable package with WIX