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

时间:2014-10-12 08:15:05

标签: asp-classic com smtp email-integration iis-8.5

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

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

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

我已经将我能够想到的所有权限(甚至使用" Everyone"帐户进行测试)发送到DLL文件(和IUSR帐户)。

在应用程序池中禁用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小时,头发几乎完全被拔掉)。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

因此我在将一些旧网站迁移到Windows Server 2012服务器时实际上遇到了这个问题,这似乎是因为依赖于cdonts.dll,这也被称为Collaboration Data Objects for NTS (CDONTS)并且Collaboration Data objects for Windows 2000 (CDOSYS)以前取代

请参阅Where to acquire the CDO Libraries (all versions)

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

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

会导致错误

  

ActiveX组件无法创建对象

经过一些研究发现,将32位DLL cdonts.dll从旧服务器迁移到新服务器并查看是否可以在系统中注册它,而不是编写代码,这是步骤。

  1. cdonts.dll放在旧服务器上的%SystemRoot%\System32
  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
    
  5. 帮助我的链接:How to Use CDONTS.DLL on Windows Server 2012 R2