在 32 位系统上开发和部署成功,但是运行 Windows Server 64 位的生产系统导致几个错误:
异常 System.DllNotFoundException 无法加载 DLL 'ABCpdf9-32.dll'。找不到指定的模块(来自 HRESULT 的异常:0x8007007E)
在 32 位系统上开发和部署成功,但是运行 Windows Server 64 位的生产系统导致几个错误:
异常 System.DllNotFoundException 无法加载 DLL 'ABCpdf9-32.dll'。找不到指定的模块(来自 HRESULT 的异常:0x8007007E)
ABCpdf 是一个支持 32 位和 64 位架构的第三方库。.dll 旨在使用软件供应商提供的安装程序安装到位。当您从供应商处下载安装程序时,您选择 32 位安装程序或 64 位安装程序,然后安装它,然后输入密钥即可。从您的应用程序的角度来看,您只需引用 abcpdf.dll,无论您将部署到 32 位还是 64 位,并且 dll 句柄将您指向正确的 dll。
到目前为止的答案误导了你。不要通过更改您的应用程序来解决问题,只需在您要部署的服务器上安装正确版本的 ABCpdf。
只有在所有开发人员和服务器机器上安装供应商提供的软件时,问题才会得到解决。
我的应用程序是 64 位的,一些旧模块正在使用 .32 位 ABCpdf。当我尝试为使用 64 位 ABCpdf 的新模块打印 pdf 时,它可以工作并打印。但是当代码尝试使用 32 位的旧模块进行打印时,它会引发以下异常。因为只有一个 ABCpdf.dll 需要添加。此外,您不能将 ABCpdf8-32.dll 直接引用到 64 位项目中。
我收到错误消息:无法加载 DLL 'ABCpdf8-32.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”
当我尝试添加参考时出现以下错误。
尝试了一段时间后,我直接将 dll 添加到 bin 文件夹中,并且可以正常工作。权限不仅是问题,因为我的所有文件夹都具有适当的权限。所以,如果有人有类似的问题可以试试这个。
除非你真的需要你的应用程序是 64 位的(我对此表示怀疑——甚至 VS 团队都选择反对),否则我建议你只构建和部署为 32 位应用程序。选择 64 位的理由很少,而且它会使第三方驱动程序、COM 对象等变得复杂。甚至可能无法汇总所有这些的 64 位版本。
我解决了它,赋予 Bin 文件夹中系统帐户的完全访问权限。
ABCpdf 是具有非托管代码的 COM dll 吗?在这种情况下,它不能在 64 位平台上运行。下面给出的文章解释了这一点(检查它的最后一点)
此外,我还要确保 ABCpdf dll 不依赖于任何其他 32 位 dll。您可以使用 Dependency Walker 进行测试(http://www.dependencywalker.com/)
您将需要找到相应 COM dll 的 64 位版本。
所以我得到了同样的错误。我正在使用win64。
这些是我为克服我的问题而采取的步骤。希望能帮助到你 :-)