【问题标题】:WiX Toolset Custom Action - Unable to find dll and reference through WiX ProjectWiX 工具集自定义操作 - 无法通过 WiX 项目找到 dll 和引用
【发布时间】:2020-02-04 05:08:32
【问题描述】:

当我的安装程序即将完成时,我正在尝试使用 WiX 工具集的自定义操作注入 SQL 脚本。

产品.wxs,

<CustomAction Id="SetMyActionValues" Return="check" Property="MyAction" Value="dbServer= 
[DATABASE_SERVER];dbName=[DATABASE_NAME];dbUser=[DATABASE_USERNAME];dbPass= 
[DATABASE_PASSWORD];folderPath=[CREATESCRIPTS]"/>

<Binary Id="MyScripts" SourceFile="C:\Users\User\source\repos\Scripts\Scripts\bin\Scripts.CA.dll" />

<CustomAction Id="MyAction" Return="check" Execute="deferred" BinaryKey="MyScripts" DllEntry="CustomAction1"/>

当我将二进制条目的“FileSource”设置为绝对路径(C:\Users\User\source\repos\Scripts\Scripts\bin\Scripts.CA.dll)时, 编译成功,但在安装即将完成时提示找不到dll。

接下来,我尝试将 Scripts.CA.dll 引用到我的 WiX 项目,并将 FileSource 更改为“Scripts.CA.dll”。这一次,我无法编译项目,Visual Studio 告诉我 Scripts.CA.dll 缺少程序集清单。

我正在使用最新的 WiX 工具集版本,谁能告诉我哪一部分出了问题?

非常感谢。

【问题讨论】:

  • 请分享安装程序日志,以及此自定义操作是如何在 wix 自定义操作项目中编写的。

标签: windows-installer custom-action wix3.10


【解决方案1】:

我使用了您的“编辑 2”答案并成功编译。我做的步骤:

  1. 将项目引用添加到我的自定义操作项目。
  2. 按照您的编辑 2 说明进行操作
  3. 编译成功

我猜我们只是不能直接添加对 Scripts.CA.dll 的引用。谢谢阿什!

【讨论】:

    【解决方案2】:

    假设您使用的是 c# wix 自定义操作。这个'dll not found'的问题通常是因为忽略了以下几点-

    1. 您的二进制文件可能不需要自定义操作。自定义操作中使用错误二进制文件的案例。

    2. 您的自定义操作名称可能与自定义操作项目中写入的名称不匹配。此名称区分大小写。

    尝试下面的命令来识别,如果自定义操作方法存在于 ca.dll 中。

    Dumpbin.exe 附带 Visual Studio C++ 开发包。 这将列出所有公共自定义操作方法。在 Visual Studio 开发命令提示符中运行。

    Dumpbin.exe /exports Sample.ca.dll
    
    1. 没有为自定义操作提供方法属性。如果你不提供 CustomAction 作为方法属性,它永远不会通过 ca.dll 暴露出来。
    [CustomAction]
    public static ActionResult customActionName(Session session)
    {
         //Do Action
         return ActionResult.Success;
    }
    

    编辑 2:

    我们通常不会给出任何文件的绝对路径,您可以使用 CA 项目参考来获取 ca.dll 的路径。 例如。 “$(var.CustomActionProjectName.TargetDir)\Scripts.CA.dll”。这里 CustomActionProjectName 是安装程序中为自定义操作引用的项目。 该路径可以在 wxi 文件中定义,以便更好地结构化。

    Installer.wxi 文件

    <?define customActionDllPath="$(var.CustomActionProjectName.TargetDir)\Scripts.CA.dl" ?>
    

    CustomAction.wxs

    <?include "Installer.wxi"?>
    <Binary Id="MyScripts" SourceFile="$(var.customActionDllPath)\Scripts.CA.dll" />
    

    【讨论】:

    • 我正在使用 WiX 工具集 3.11 和 VB 自定义操作。我检查了 1 和 2,二进制文件确实有我的自定义操作,并且属性 在那里。我已删除 Scripts.CA.dll 并将其切换回绝对路径,但我不确定是否应该使用“延迟”,因为我需要等待安装程序完成创建数据库,然后才运行自定义注入 sql 脚本的操作。我检查了 InstallSequence,最接近的是 Before="InstallFinalize"。有什么想法吗?
    • 调度与dll not found错误无关。
    • 请与确切问题共享安装程序日志并添加您已用于 customaction1 的 VB 自定义操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多