Asp classic Win 2012R2服务器-ActiveX组件可以';t创建对象aspmail 4.0(SMTPsvg.Mailer)IIS8.5
我不得不将一个经典的ASP应用程序从windows server 2008移动到windows server 2012R2,该应用程序使用了一个名为(aspmail 4.0)的com对象,该对象来自一家名为ServerObjects的公司,该公司已不再营业(至少无法与他们联系) 无论如何,我已经注册了DLL(Asp classic Win 2012R2服务器-ActiveX组件可以';t创建对象aspmail 4.0(SMTPsvg.Mailer)IIS8.5,asp-classic,com,smtp,email,iis-8.5,Asp Classic,Com,Smtp,Email,Iis 8.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%安装,没有问题也没
C:\Windows\SysWOW64\regsvr32.exe d:\components\aspmail4\smtpsvg.DLL
),它在我检查注册表时工作(它100%安装,没有问题也没有错误)
我已经验证了DLL是否正确,注册表是否指向正确的路径(并且只有一条路径)
我已经为DLL文件(和IUSR帐户)提供了我所能想到的所有权限(甚至使用“Everyone”帐户进行了测试)
在应用程序池中禁用32位后,我得到“ActiveX组件无法创建对象。
”错误
在应用程序池中启用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:
故障应用程序名称: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小时了,头发几乎完全被拔出)。检查应用程序池的高级设置,选择“启用32位应用程序”因此,我自己在将一些旧站点迁移到Windows Server 2012 Server时遇到了这个问题,这似乎是因为依赖于
cdonts.dll
,后者也称为(cdonts),不久前被(CDOSYS)取代
看
不幸的是,我迁移的遗留代码中包含了对
Dim cdo:Set cdo=Server.CreateObject(“CDONTS.NewMail”)
这会导致错误
ActiveX组件无法创建对象
与编写代码不同的是,经过一点研究发现,只需将32位DLLcdonts.DLL
从旧服务器迁移到新服务器并查看是否可以在系统中注册,这将更容易,以下是步骤
%SystemRoot%\System32
中的cdonts.dll
%SystemRoot%\SysWow64
对于其他32位子系统DLL,否则,如果它是32位操作系统,则需要将其复制到
%SystemRoot%\System32
值得注意的是,只要使用正确的regsvr32.exe
,DLL就可以驻留,但为了保持整洁,请遵循此工作流
regsvr32.exe
注册DLL。在本例中,它是一个64位服务器,因此需要使用32位子系统文件夹中的regsvr32
注册DLLC:\>cd%systemroot%\syswow64
C:\Windows\SysWow64\>regsvr32 cdonts.dll
帮助我的链接:DLL可能很旧,现在您尝试在64位操作系统上运行它。大多数情况下,使用32位子系统注册32位DLL足以使这些类型的DLL正常工作。在这种情况下,尽管它引发了一个
访问冲突
异常,但从基本上来说,这意味着DLL正在尝试访问它不应该访问的内存地址(这将在体系结构和操作系统从32位更改为64位以及从一个版本更改为另一个版本时发生)。可能是DLL所需的一个或多个依赖项不存在或已更改,或者可能与权限相关。这正是我所担心的。我想我将在DotNet中编写一个组件,并将其作为com对象公开。我已经有了用于发送邮件的.Net代码-只需要转换它。您可以使用类似(很棒的小工具)的工具来查看DLL使用的依赖项以及问题可能起源的位置。不过,老实说,如果您只是想用经典ASP发送电子邮件,只需使用大多数Windows安装中提供的CDONTS库即可。在SO站点上有很多示例和示例。32位已启用,但不幸的是,该组件存在依赖性问题。任何访问网络设置、安全性或图形子例程(不久前编写)的组件似乎将不再在Windows Server 2012或2012R2上工作。微软误导了很多开发者,认为IIS8+将继续支持经典ASP-只要你不使用任何组件,它就会支持经典ASP。OP已经声明,他们在应用程序池设置中启用和不启用32位时都进行了尝试-“在应用程序池中启用32位,只会使页面崩溃”。