是什么原因导致WIX安装程序中找不到1723 DLL错误

时间:2013-05-07 09:46:12

标签: wix installer windows-installer custom-action msiexec

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

  

WIX错误1723 。此Windows Installer存在问题   包。无法运行此安装所需的DLL。

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

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

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

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

6 个答案:

答案 0 :(得分:4)

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代表更多技术细节。

答案 1 :(得分:1)

我最近收到此错误,问题是DLL依赖。我的DLL有我的开发机器上存在的其他DLL依赖项,如果我看到错误,则不在目标机器上。您可以使用Dependency Walker http://www.dependencywalker.com检查您的依赖关系,以确定是否是这种情况。这无疑帮助了我。

答案 2 :(得分:1)

我们花了几个月的时间来解决血腥的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网页上提供反馈,但我无法注册。

答案 3 :(得分:0)

在这个同样的问题上,我用头撞了几个星期。我的解决方案不仅重命名自定义操作方法名称,还重命名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,它仍然会因同样的原因而失败。

答案 4 :(得分:0)

对我来说,这是对自定义操作方法的重命名。我将一个字母从小写更改为大写,并忘记在XML中更改它。

答案 5 :(得分:0)

就我而言,我必须首先编译CustomActions项目,然后编译安装项目。