我正在尝试在WiX中使用我的第一个自定义操作,我得到:
错误2896:执行操作CustomActionTest失败。
我使用的是Visual Studio 2010,WiX 3.5,64位Windows 7旗舰版,.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项目中使用了项目引用来进行自定义操作。我不确定我做错了什么。
答案 0 :(得分:16)
我通过使用/ lvx选项运行我的msi以获得详细的日志记录来解决这个问题。我还必须将我的操作移动到InstallExecuteSequence部分以获取有意义的错误消息。当对Win的调用是在PushButton中时,没有返回任何有意义的内容。
<InstallExecuteSequence>
<Custom Action='CustomActionTest' After='InstallFinalize' />
</InstallExecuteSequence>
System.BadImageFormatException:无法加载文件或程序集“JudgeEdition”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。
我将useLegacyV2RuntimeActivationPolicy属性更改为true。一切都开始很好地运作了。
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
这些链接帮助我加快了速度:
答案 1 :(得分:4)
作为KnightsArmy回答的推论,当 CustomAction 元素上的 DllEntry 属性错误时,也会抛出此错误。在我的情况下,我有一个拼写错误,我可以从日志中得到的唯一错误信息是臭名昭着的错误2896.
答案 2 :(得分:0)
我得到了相同的错误代码,但根本原因是因为其中一个“自定义操作”方法引发了异常。如果您不编写try-catch并编写有意义的错误消息。 MSI日志只会告诉您错误#。
欢呼