繁体   English   中英

Win 2012R2 Server - ActiveX 组件无法创建对象 aspmail 4.0 (SMTPsvg.Mailer) IIS8.5

[英]Win 2012R2 Server - ActiveX component can't create object aspmail 4.0 (SMTPsvg.Mailer) IIS8.5

我不得不将经典的 ASP 应用程序从 Windows Server 2008 移动到 Windows Server 2012R2,并且该应用程序使用了一个名为 (aspmail 4.0) 的 com 对象,该对象来自一家名为 ServerObjects 的公司——该公司不再营业(至少无法联系)他们)。

无论如何,我已经注册了 DLL( C:\\Windows\\SysWOW64\\regsvr32.exe d:\\components\\aspmail4\\smtpsvg.dll ),它在我检查注册表时起作用(它 100% 安装没有问题或错误)。

我已经验证 DLL 是正确的,并且注册表指向正确的路径(并且只有 1 个路径)。

我已经向 DLL 文件(和 IUSR 帐户)授予了我能想到的所有权限(甚至使用“Everyone”帐户对其进行了测试)。

在应用程序池中禁用 32 位后,出现“ ActiveX component can't create object. ”错误。

在应用程序池中启用 32 位后,它只会使页面崩溃(生成致命异常)并在事件日志中显示错误,如下所示:

Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x52157ba0
Faulting module name: smtpsvg.dll, version: 4.1.0.0, time stamp: 0x2a425e19
Exception code: 0xc0000005
Fault offset: 0x0004e001
Faulting process id: 0x3f0
Faulting application start time: 0x01cfe5f2dc426b4d
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: d:\components\aspmail4\smtpsvg.dll
Report Id: 3dd63a38-51e6-11e4-80da-0cc47a302001
Faulting package full name: 
Faulting package-relative application ID:

是否有一些我遗漏的无证设置? 我去了几十个论坛,并按照信件进行了所有操作,但没有任何效果(现在 8 小时了,头发几乎完全被拔掉了)。

所以我实际上在将一些旧站点迁移到 Windows Server 2012 服务器时遇到了这个问题,这似乎是因为对cdonts.dll的依赖,它也被称为NTS 的协作数据对象(CDONTS)并在某个时候被取代以前由Windows 2000 (CDOSYS)协作数据对象提供

查看从哪里获得 CDO 库(所有版本)

不幸的是,我正在迁移的遗留代码包括对

Dim cdo: Set cdo = Server.CreateObject("CDONTS.NewMail")

这会导致错误

ActiveX 组件无法创建对象

与编写代码不同,经过一些研究发现,将 32 位 DLL cdonts.dll从旧服务器迁移到新服务器会更容易,看看我是否可以在系统中注册它,以下是步骤。

  1. 位于旧服务器上的%SystemRoot%\\System32 cdonts.dll
  2. 将 DLL 复制到新服务器

    这需要一些深谋远虑。 如果服务器运行的是 64 位版本的操作系统,则需要将文件复制到

    %SystemRoot%\\SysWow64

    使用其他 32 位子系统 DLL,否则,如果它是 32 位操作系统,则需要将其复制到

    %SystemRoot%\\System32

    值得注意的是,只要使用正确的regsvr32.exe ,DLL 就可以驻留,但为了保持整洁,请遵循此工作流程。

  3. 使用正确的子系统版本的regsvr32.exe来注册 DLL。 在这种情况下,它是一个 64 位服务器,因此需要在 32 位子系统文件夹中使用regsvr32注册 DLL。

  4. 测试应用程序。 发现错误已经消失,脚本使用旧组件按预期工作。

     C:\\>cd %systemroot%\\syswow64 C:\\Windows\\SysWow64\\>regsvr32 cdonts.dll

对我有帮助的链接:如何在 Windows Server 2012 R2 上使用 CDONTS.DLL

检查应用程序池的高级设置,选项“启用 32 位应用程序”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM