Были ли у вас ошибки DLL после обновления до 64-битного сервера? - PullRequest
0 голосов
/ 16 июня 2010

Мне интересно, сталкивался ли кто-нибудь еще с ошибками DLL после обновления своих серверов.

Моя компания находится в процессе обновления нашего кода и сервера после десяти лет использования классического ASP.Мы настроили наш новый сервер под управлением Windows 2008 и IIS 7. Наш классический ASP-код и наш новый код asv.net mvc работают довольно хорошо.

Наши проблемы начали возникать, когда мы начали перемещать наши старые веб-сайты нановый сервер.При попытке загрузить страницу в браузере фактического сервера мы изначально получили ошибку 500.Если мы обновим страницу, то часть страницы будет загружена, но затем отобразится ошибка:

Ошибка объекта сервера 'ASP 0177: 800401f3'

Server.CreateObject Failed

/ folder / scriptname.asp, строка 24

800401f3

btw: На удаленных машинах мы просто получим 500 ошибок.

Строка 24 - это первый исполняемый код в сценарии:

'23 lines of comments

set A0SQL_DATA = server.createobject("olddllname.Data")

'the rest of the script

Эта конкретная строка пытается использовать десятилетнюю библиотеку DLL для создания объекта сервера.Я не думаю, что конфигурация сервера является проблемой, потому что я могу без проблем создавать объекты сервера "adodb.recordset".

Есть ли проблема при запуске правильно зарегистрированных старых DLL на 64-битных системах?

Есть ли способ заставить старые библиотеки DLL работать на 64-битных системах?

Редактировать

Я подтвердил, что пул приложений сайта работает в режиме 32-битной совместимости, носайт по-прежнему отправляет те же ошибки при вызове set A0SQL_DATA = server.createobject("olddllname.Data").

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

Есть ли проблема при запуске правильно зарегистрированных старых DLL на 64-битных системах?

Да, наиболее ярким примером того, как 32-битная DLL больше не работает в 64-битной Windows, является Microsoft Jet Engine, то есть драйвер, необходимый для доступа к файлам .mdb. Поскольку 64-разрядная версия отсутствует, единственный способ получить доступ к файлам .mdb в классическом приложении ASP - запустить IIS (или, точнее, пул приложений) в режиме 32-разрядной совместимости.


Как определить, находитесь ли вы в 32- или 64-битном режиме (не проверено):

Set shell = CreateObject("WScript.Shell")
Response.Write shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")

Это должно привести к выводу AMD64 в 64-битном режиме и x86 в 32-битном режиме (собственная 32-битная или 32-битная эмуляция на 64-битном процессоре).

1 голос
/ 16 июня 2010

Ну, ошибка 800401f3 означает «неверное имя класса».Это настоятельно предполагает, что DLL зарегистрирована с неправильным ProgId (или что ProgId отсутствует полностью).Когда ваш системный администратор подтвердил, что DLL была зарегистрирована, он также подтвердил, что ее ProgId имеет значение "olddllname.Data"?

...