12

我正在尝试在 WiX 中使用我的第一个自定义操作,我得到:

错误 2896:执行操作 CustomActionTest 失败。

我正在使用 Visual Studio 2010、WiX 3.5、64 位 Windows 7 Ultimate、.NET Framework 4。

以下是我认为相关的部分:

<Binary Id="JudgeEditionCA" SourceFile="..\JudgeEditionCA\bin\Debug\JudgeEdition.CA.dll" />
<CustomAction Id="CustomActionTest" BinaryKey="JudgeEditionCA" DllEntry="CustomActionOne" Execute="immediate"/>

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

从动作:

namespace JudgeEditionCA
{
    public class CustomActions
    {
        [CustomAction]
        public static ActionResult CustomActionOne( Session session )
        {
            return ActionResult.Success;
        }
    }
}

以及来自自定义操作的配置文件:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="false">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>

最后,我在我的 WiX 项目中对自定义操作使用了项目引用。我不确定我做错了什么。

4

3 回答 3

17

我通过使用 /lvx 选项运行我的 msi 来获得详细日志记录。我还必须将我的操作移至 InstallExecuteSequence 部分以获得有意义的错误消息。当对 CA 的调用在 PushButton 中时,没有返回任何有意义的内容。

<InstallExecuteSequence>
    <Custom Action='CustomActionTest' After='InstallFinalize' />
</InstallExecuteSequence>

System.BadImageFormatException:无法加载文件或程序集“JudgeEdition”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。

我将 useLegacyV2RuntimeActivationPolicy 属性更改为 true。一切都开始运作良好。

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>

这些链接帮助我加快了速度:

于 2010-08-12T16:32:44.267 回答
4

作为KnightsArmy回答的必然结果,当CustomAction元素上的DllEntry属性错误时,也会引发此错误。就我而言,我有一个错字,我能从日志中得到的唯一错误信息是臭名昭著的错误 2896。

于 2012-06-07T00:40:49.687 回答
0

我得到了相同的错误代码,但根本原因是因为自定义操作方法之一引发了异常。如果您不编写 try-catch 并编写有意义的错误消息。MSI 日志只会告诉您错误#。

干杯

于 2020-01-28T09:44:55.803 回答