9

我正在尝试为我的 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,但我得到了同样的错误。

关于我做错了什么的任何想法?

4

7 回答 7

8

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

请参阅此处了解更多信息。此外,正如 AntonyW 已经指出的那样,fuslogvw.exe 在这种情况下非常有用。

于 2010-08-24T23:12:25.430 回答
8

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

于 2014-01-10T16:26:06.037 回答
7

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

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

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

于 2010-04-12T18:34:15.487 回答
1

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

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

public static ActionResult CheckPID(Session session)
于 2013-04-19T22:25:56.807 回答
1

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

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

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

谢谢 Yogesh

于 2014-04-15T08:22:56.643 回答
1

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

于 2016-08-05T19:29:58.047 回答
0

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

于 2013-11-01T19:07:11.153 回答