我不得不将一个经典的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小时,头发几乎完全被拔掉)。
答案 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
从旧服务器迁移到新服务器并查看是否可以在系统中注册它,而不是编写代码,这是步骤。
cdonts.dll
放在旧服务器上的%SystemRoot%\System32
。将DLL复制到新服务器
这需要一些深谋远虑。如果服务器是运行64位版本的操作系统,则需要将文件复制到
中%SystemRoot%\SysWow64
使用其他32位子系统DLL,否则,如果是32位操作系统,则需要将其复制到
%SystemRoot%\System32
值得注意的是,只要使用了正确的
regsvr32.exe
,DLL就可以驻留,但为了保持整洁,请遵循此工作流程。
使用正确的regsvr32.exe
子系统版本注册DLL。在这种情况下,它是一个64位服务器,因此需要在32位子系统文件夹中使用regsvr32
注册DLL。
测试应用程序。发现错误已经消失,脚本按预期使用遗留组件工作。
C:\>cd %systemroot%\syswow64
C:\Windows\SysWow64\>regsvr32 cdonts.dll