【问题标题】:Unable to run Wix Custom Action in MSI无法在 MSI 中运行 Wix 自定义操作
【发布时间】:2011-02-05 07:48:40
【问题描述】:

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

关于我做错了什么有什么想法吗?

【问题讨论】:

  • “无法运行完成此安装所需的 DLL。” - 这表明安装程序找到了 dll,但在其中找不到方法。您提到您在发布日志后更改了代码 - 您可以发布更新的日志吗?你是如何运行日志的 - 你做了 /l*vx 选项吗?

标签: wix windows-installer custom-action


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 啊,终于,我也是这样。
    • 这正是发生在我身上的事情。我创建了一个名为“Company.CA”的项目,它产生了“Company.CA.dll”。但后来 WiX 把所有东西都塞进了“Company.CA.CA.dll”,我没有注意到。我浪费了整整一个小时!
    【解决方案3】:

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

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

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

    【讨论】:

    • 但是他们可以写入目标机器上的文件!
    • Debugger.Launch() 没有为我做任何事情。
    • @jcmcbeth 默认情况下,Windows 8 及更高版本配置为防止调试器在不同的用户会话中启动。要解决此问题,可以通过在命令行中运行以下命令来删除标志:reg add "HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}" /v AppIDFlags /t REG_DWORD /d 8 /f 要恢复默认值,请运行以下命令:reg add "HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}" /v AppIDFlags /t REG_DWORD /d 40 /f 请参阅here
    【解决方案4】:

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

    <CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" />
    
    public static ActionResult CheckPID(Session session)
    

    【讨论】:

      【解决方案5】:

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

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

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

      谢谢 尤格什

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多