Мне пришлось перенести классическое приложение ASP с Windows Server 2008 на Windows Server 2012R2, и приложение использует объект com, называемый (aspmail 4.0) от компании ServerObjects, которая больше не работает (по крайней мере, нет возможности связаться с ними).Win 2012R2 Server - компонент ActiveX не может создать объект aspmail 4.0 (SMTPsvg.Mailer) IIS8.5
В любом случае, я зарегистрировал DLL (C:\Windows\SysWOW64\regsvr32.exe d:\components\aspmail4\smtpsvg.dll
), который работает, когда я проверил реестр (на 100% не установлено никаких проблем и ошибок).
Я проверил, что DLL верна, и реестр указывает на правильный путь (и что существует только один путь).
Я дал все разрешения, о которых я могу думать (даже протестировал их с помощью учетной записи «Все») в 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 часов волосы почти полностью вырваны).
DLL, вероятно, довольно старый, и теперь вы пытаетесь запустить его на операционной системе 64 бит. В большинстве случаев регистрация 32-битной DLL с использованием 32-разрядной подсистемы достаточна для работы этих типов DLL. В этом случае, хотя в нем возникает исключение «ACCESS VIOLATION», которое в базовых терминах означает, что DLL пытается получить доступ к адресам памяти, они не должны быть (что произойдет, когда архитектуры и операционные системы изменятся с 32 до 64 бит и из версии к версии). Это может быть одна или несколько зависимостей, требуемых DLL, не существует или не изменилась, или это может быть связано с разрешением. – Lankymart
Вот что я волновался. Я думаю, что я напишу компонент в DotNet и выставляю его как объект com. У меня есть .Net-код для отправки почты - просто нужно его преобразовать. – MC9000
Вы можете использовать что-то вроде [Dependency Walker] (http://www.dependencywalker.com/) (отличный маленький инструмент), чтобы посмотреть, какие зависимости использует DLL и какие тренировки, в которых может возникнуть проблема. Если честно, если вы просто хотите отправить электронную почту с помощью Classic ASP, просто используйте библиотеку CDONTS, которая будет присутствовать на большинстве установок Windows. На сайте SO есть много примеров [tag: cdonts] и [tag: cdo]. – Lankymart