2

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

无论如何,我已经注册了 DLL C:\Windows\SysWOW64\regsvr32.exe d:\components\aspmail4\smtpsvg.dll

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

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

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

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

错误应用程序名称:w3wp.exe,版本:8.5.9600.16384,时间戳:0x52157ba0
错误模块名称:smtpsvg.dll,版本:4.1.0.0,时间戳:0x2a425e19
异常代码:0xc0000005
故障偏移量:0x0004e001
错误进程ID:0x3f0
错误应用程序启动时间:0x01cfe5f2dc426b4d
错误的应用程序路径:C:\Windows\SysWOW64\inetsrv\w3wp.exe
错误模块路径:d:\components\aspmail4\smtpsvg.dll
报告 ID:3dd63a38-51e6-11e4-80da-0cc47a302001
故障包全名:
错误的包相关应用程序 ID:

我是否缺少一些未记录的设置?我已经去了几十个论坛,并严格按照所有内容进行操作,但没有任何效果(现在 8 小时,头发几乎完全拔掉了)。

4

2 回答 2

1

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

请参阅从何处获取 CDO 库(所有版本)

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

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

这会导致错误

ActiveX 组件无法创建对象

无需编写代码,经过一番研究后发现将 32 位 DLLcdonts.dll从旧服务器迁移到新服务器并查看是否可以将其注册到系统会更容易,以下是步骤。

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

    这需要一些先见之明。如果服务器是运行 64 位版本的操作系统,则需要将文件复制到

    %SystemRoot%\SysWow64
    

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

    %SystemRoot%\System32
    

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

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

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

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

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

于 2017-02-28T13:23:21.077 回答
0

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

于 2014-10-12T20:19:52.090 回答