【问题标题】:What causes a 1723 DLL not found error in a WIX installer是什么导致 WIX 安装程序中出现 1723 DLL not found 错误
【发布时间】:2013-05-07 09:46:11
【问题描述】:

我正在使用 WIX 安装程序并不断收到此错误消息:

WIX 错误 1723。此 Windows 安装程序有问题 包裹。无法运行完成此安装所需的 DLL。

是否还有其他与找不到 DLL 无关的问题会导致 1723 错误?

我可以 100% 肯定地说,必须找到 DLL,因为以前在同一个安装程序中的自定义操作都有效,而且它们都使用同一个 DLL。

我之前遇到过这个错误,并通过重命名自定义操作解决了它,所以我认为它与自定义操作允许的名称长度有关。这次我尝试了一个更短的名称和一个与其他工作自定义操作的确切长度相同的名称,但仍然出现此错误。

我调查了 1723 的原因,最常见的原因似乎是安装程序由于访问权限而无法解压 DLL。尽管这不太可能,因为同一文件中引用同一 DLL 的其他自定义操作可以正常工作,但我已确保安装程序尝试访问的文件夹对此用户具有完全访问权限,而且我正在管理员的命令提示符下运行安装程序模式,所以我们应该没有问题。

【问题讨论】:

  • 这不是 WiX 工具集错误代码,所以我有点困惑。您是在安装过程中从 Windows Installer (MSI) 获得的吗?如果是这样,您能否分享有关自定义操作、其依赖项等的更多信息?
  • 这不是 WIX 工具集错误,据我所知,这是 Windows 安装程序无法找到 DLL 的标准错误代码。但是我很确定它是由 WIX 没有正确构建安装程序引起的。我认为/希望我刚刚发现原因是自定义操作名称中的 _。
  • 好吧,我们需要更多关于您如何在 MSI 中包含自定义操作以及如何构建自定义操作 .dll 以真正提供服务的详细信息。
  • 有日志文件吗?它说什么?试试 Rob's tool-less log file quick review。对于崩溃的包,我喜欢添加 "flush to log file"msiexec.exe /I "C:\Test.msi" /QN /L*V! "C:\msilog.log"

标签: wix installation custom-action windows-installer


【解决方案1】:

WIX 3.x(更具体地说是 MakeSfxCA)有一个已知错误,可能会生成错误的本机 dll 文件,从而导致错误“1723”。根据自定义操作的名称(用“CustomAction”属性修饰的方法)触发错误。

如果您有两个自定义操作具有相同的前缀,一个后跟一个小写字母,另一个后跟一个大写字母(在字母表中稍后出现),您可能会遇到“1723”错误。例如。两个名为“isactive”和“isBlocked”的自定义操作很麻烦。

这与 MakeSfxCA 错误地对导出方法的入口点进行排序有关。

参照。 http://wixtoolset.org/issues/4502 了解 WIX 的问题,Adding a new Custom Action to a project prevents an existing Custom Action from being run 了解更多技术细节。

【讨论】:

  • 虽然它说它在 3.8/9 中已修复,但我遇到了与 3.10 中自定义操作的公共前缀相关的问题
【解决方案2】:

我最近收到此错误,问题是 DLL 依赖项。我的 DLL 有其他 DLL 依赖项,这些依赖项存在于我的开发机器上,但我看到错误时不在目标机器上。您可以使用 Dependency Walker http://www.dependencywalker.com 检查您的依赖关系,以了解是否属于这种情况。这当然对我有帮助。

【讨论】:

    【解决方案3】:

    我们花了几个月的时间来解决该死的error 1723

    通过dumpbin /Exports CustomAction.CA.dll(可从Visual Studio开发者工具运行)反编译后,有如下排序的条目:

    121 78 000039DE Dev*****************
    122 79 000039F4 DML*****************
    123 80 00003A0A DoN*****************
    

    假设应该使用 ASCII 进行排序,看起来这是不正确的。大写字母M 应在小写字母e 之前,因此应替换条目121122

    我们已经在 Wix 3.9 R2 上重现了该问题,但在某些 Windows 7 Ultimate 虚拟机上没有出现问题,但在 Windows 7 Enterprise 上可以重现。

    对我们来说,解决方案是在 CustomAction 项目中将 CustomAction 的名称从 DML********* 更改为 DmL******** 以使排序正常工作。

    PS:我试图直接在 WiX 网页上提供反馈,但我无法注册。

    【讨论】:

    • Wix 在订购条目时曾经有一个 error,但在 Wix 3.9 RC3 及以后的版本中已修复。请您仔细检查一下wix版本。如需更多技术信息,请查看here on SO
    • Win10的3.10肯定存在这个问题,不知道是不是因为排序问题,但是我也遇到了公共前缀的错误。
    【解决方案4】:

    我用同样的问题把头撞在墙上好几个星期了。我的解决方案不仅重命名了自定义操作方法名称,而且重命名了 CustomAction 中的 id。

    <CustomAction Id="CA_InstallerDll.install"
                  BinaryKey="B_CustomAction_CA"
                  DllEntry="Install_InstallerDll"
                  Execute="deferred"
                  Return="check"
                  Impersonate="no"/>
    

    ...到...

    <CustomAction Id="CA_DllInstaller.install"  //changed InstallerDll to DllInstaller
                  BinaryKey="B_CustomAction_CA"
                  DllEntry="Install_DllInstaller" //Changed the CA Method name too
                  Execute="deferred"
                  Return="check"
                  Impersonate="no"/>
    

    我不确定这是否是您所说的“重命名自定义操作”,但这就是为我解决的问题。另一个令人沮丧的事情是,即使我将它重命名为InstallerDll,它仍然会因为同样的原因而失败。

    【讨论】:

    • 是的,这就是我所做的,基本上改变了自定义操作的 ID 和删除 _ 的方法的名称,一切似乎都在工作。
    【解决方案5】:

    对我来说,这是对自定义操作方法的重命名。我把一个字母从小写改成了大写,忘记在 XML 中也改了。

    【讨论】:

      【解决方案6】:

      就我而言,我必须先编译 CustomActions 项目,然后再编译 Setup 项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 2018-04-17
        • 2021-08-25
        • 1970-01-01
        • 2013-09-20
        • 2021-02-21
        相关资源
        最近更新 更多