我正在尝试为我的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,但我得到了同样的错误。
关于我做错的任何想法?
答案 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。