2014-10-12 6 views
2

Мне пришлось перенести классическое приложение 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 часов волосы почти полностью вырваны).

+1

DLL, вероятно, довольно старый, и теперь вы пытаетесь запустить его на операционной системе 64 бит. В большинстве случаев регистрация 32-битной DLL с использованием 32-разрядной подсистемы достаточна для работы этих типов DLL. В этом случае, хотя в нем возникает исключение «ACCESS VIOLATION», которое в базовых терминах означает, что DLL пытается получить доступ к адресам памяти, они не должны быть (что произойдет, когда архитектуры и операционные системы изменятся с 32 до 64 бит и из версии к версии). Это может быть одна или несколько зависимостей, требуемых DLL, не существует или не изменилась, или это может быть связано с разрешением. – Lankymart

+0

Вот что я волновался. Я думаю, что я напишу компонент в DotNet и выставляю его как объект com. У меня есть .Net-код для отправки почты - просто нужно его преобразовать. – MC9000

+0

Вы можете использовать что-то вроде [Dependency Walker] (http://www.dependencywalker.com/) (отличный маленький инструмент), чтобы посмотреть, какие зависимости использует DLL и какие тренировки, в которых может возникнуть проблема. Если честно, если вы просто хотите отправить электронную почту с помощью Classic ASP, просто используйте библиотеку CDONTS, которая будет присутствовать на большинстве установок Windows. На сайте SO есть много примеров [tag: cdonts] и [tag: cdo]. – Lankymart

ответ

0

Проверьте дополнительные параметры для пула приложений, опция «Включить приложение 32-Bit»

+0

32 бит включен, но, к сожалению, у компонента есть проблема зависимости. Похоже, что любой компонент, который обращается к сетевым настройкам, безопасности или графическим подпрограммам (написанным некоторое время назад), больше не будет работать в Windows Server 2012 или 2012R2. Microsoft вводит в заблуждение многих разработчиков, полагая, что IIS8 + будет продолжать поддерживать классический ASP - который он делает, пока вы не используете какие-либо компоненты. – MC9000

+0

OP уже заявила, что они пытались использовать и без 32 бит в настройках пула приложений - * «С 32-битным включением в пуле приложений он просто сбрасывает страницу« *. – Lankymart

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 компонент не может создать объект

Вместо wri После небольшого исследования было бы проще просто перенести 32-разрядную DLL cdonts.dll со старого сервера на новый и посмотреть, могу ли я зарегистрировать его в системе, вот шаги.

  1. Находится cdonts.dll в %SystemRoot%\System32 на старом сервере.
  2. Скопировано из библиотеки DLL на новый сервер

    Для этого потребуется некоторое предусмотрение.Если сервер был запущен 64-разрядная версия операционной системы файл будет необходимо скопировать в

    %SystemRoot%\SysWow64 
    

    с другими DLL, 32-разрядная подсистема, в противном случае, если бы это был 32-битных ОС было бы должны быть скопированы в

    %SystemRoot%\System32 
    

    стоит отметить, что DLL может располагаться в любом случае до тех пор, как правильно regsvr32.exe используется, но для хранения вещей аккуратных следовал этому рабочему процессу.

  3. Используйте правильную версию подсистемы regsvr32.exe зарегистрировать DLL. В этом случае это был 64-разрядный сервер, поэтому необходимо было зарегистрировать DLL, используя regsvr32 в 32-битной подсистеме.

  4. Проверьте приложение. Установлено, что ошибка ушла, и скрипт работал как ожидающий использования устаревшего компонента.

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

Link, которые помогли мне: How to Use CDONTS.DLL on Windows Server 2012 R2

 Смежные вопросы

  • Нет связанных вопросов^_^