5

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

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

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

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

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

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

4

6 回答 6

4

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

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

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

参照。http://wixtoolset.org/issues/4502对于 WIX 的问题和向项目添加新的自定义操作可防止运行现有的自定义操作以获取更多技术细节。

于 2014-08-14T22:22:28.883 回答
1

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

于 2015-03-25T13:19:10.983 回答
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因此条目121并且122应该被替换。

我们已经在 Wix 3.9 R2 上重现了该问题,但是在某些 Windows 7 Ultimate 虚拟机上问题并未发生,但在 Windows 7 Enterprise 上可以重现。

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

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

于 2015-05-29T09:11:10.137 回答
0

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

<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,它仍然会因为同样的原因而失败。

于 2013-05-07T19:37:26.157 回答
0

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

于 2015-12-23T08:35:50.987 回答
0

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

于 2016-07-14T21:21:55.810 回答