Классический ASP: C0000005 Ошибка при выполнении - PullRequest
7 голосов
/ 10 января 2011

Я пытаюсь выполнить классические ASP-страницы в 64-битной версии R2 для Windows 2008.

Изначально проблема была с регистрацией DLL: теперь это исправлено. Регистрация DLL-файла в Windows Server 2008 R2

Теперь, когда я пытаюсь получить доступ к странице, я получаю эту ошибку

Ошибка активных страниц сервера 'ASP 0241'

Исключение CreateObject

index.asp

CreateObject для '(null)' вызвало исключение C0000005.

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

Когда я изменяю код с Server.CreateObject на CreateObject .. Я получаю эту ошибку

Ошибка активных страниц сервера 'ASP 0115' Неожиданная ошибка index.asp

Во внешнем объекте произошла ошибка (C0000005).Сценарий не может быть продолжен.

Я проверил все, что мог - Права доступа и администратора и т. Д. Пул приложений установлен в Нет управляемого кода + Классический режим.

Любые идеи для исправленияэто?

Ответы [ 8 ]

2 голосов
/ 17 сентября 2013

У меня была точно такая же ошибка.

В моем случае ошибка C0000005 была вызвана отсутствием зависимости.

ProcessMonitor, помогите мне найти его.(Фильтруйте по процессу и отметьте «Имя не найдено») Name not found on dll

Копирование нужного файла в нужном месте решило мою проблему.(В моем случае VB6FR.dll был необходимой зависимостью для vb6 на французском языке.)

2 голосов
/ 12 января 2011

Вы не собираетесь это исправить в ASP. C0000005 является исключением нарушения прав доступа. Это происходит, когда код пытается прочитать память, которую он не выделил.

DLL делает что-то плохое, когда загружается или строит объект.

Вы проверяли dll с простым файлом .vbs?

1 голос
/ 23 апреля 2018

У меня была такая же проблема, когда-то после того, как KB4093114 был установлен на сервере.(Я не уверен на 100%, что проблема была вызвана в КБ, но я подозреваю, что это так, потому что обработчик сценариев был обновлен.)

Проблема была вызвана набором записей, который выводит поле varchar (max) в разметку,Несмотря на то, что ошибка не предоставляет номер строки, я смог указать ее на вывод поля varchar (max) методом проб и ошибок.

<%
...
rs.Open "SELECT LongDescription FROM Table1"
while (not rs.EOF)
   %> <p><%= rs("LongDescription") %></p> <%    ' ERROR HAPPENS BECAUSE OF THIS LINE
   rs.MoveNext
wend
%>

Удаление этой строки решает проблему.Кроме того, приведение поля к не макс. Varchar также исправляет это:

 rs.Open "SELECT LongDescription = Cast(LongDescription as varchar(4000)) FROM Table1"

Что еще хуже, я обнаружил, что как только ошибка произойдет, даже если вы исправите ее , вам необходимо перезапуститьпул приложений для устранения ошибки .

1 голос
/ 25 октября 2016

У меня была одна и та же ошибка при загрузке данных CSV-файла более одного раза.Шаг 1 - Сначала создайте временную таблицу для передачи данных CSV во временную таблицу, а затем перейдите к основной таблице и удалите временную таблицу после перемещения данных.Это должно быть сделано программно.

Шаг 2 - Перейдите в mysql и выберите базу данных и используйте этот запрос (ПОКАЗАТЬ ПОЛНЫЙ ПРОЦЕССЛИСТ;) без скобок.это покажет вам состояние запущенных объектов. Если вы найдете какой-либо объект со статусом «Сон», его необходимо очистить перед второй попыткой загрузки файла.обычно время ожидания по умолчанию составляет около 28000 сек.Вы должны уменьшить его согласно требованию.Код для сокращения времени ожидания (SET GLOBAL wait_timeout = 5;).Используйте без браслетов.Используйте это MySQL.это переустанавливает ваше глобальное время ожидания на 5 секунд (меняется в соответствии с вашими потребностями).Это должно решить вашу проблему.Всего наилучшего.

1 голос
/ 09 августа 2014

Я тоже потратил несколько часов на это.

В моем случае это было вызвано повторным использованием объекта набора записей без закрытия его между вызовами БД.Код работал без видимых проблем в нескольких похожих случаях, а затем один из них просто перестал терпеть процесс.

Произошла ошибка при попытке закрыть набор записей в конце страницы, что сделало устранение неполадоктрудно.

Я очистил код, убедившись, что набор записей был закрыт между вызовами, и это решило проблему.

0 голосов
/ 06 апреля 2016

Просто столкнулся с этой же ошибкой при попытке использовать свой собственный элемент управления com, и в моем случае это оказалось вызвано моей компиляцией dll в режиме отладки.

Есть два пути:

  1. Запустите IIS в режиме отладки. Для 32-битной вы используете следующую строку: C: \ Windows \ SysWOW64 \ inetsrv> w3wp.exe -debug

    Обратите внимание, что вам нужно остановить службу IIS, и для 64-битной системы вы используете одну из них в System32.

  2. Скомпилируйте релизную версию:)

0 голосов
/ 13 марта 2016

По моему опыту, вы используете AVG Free, и после обновления вы получили такую ​​ошибку.

0 голосов
/ 12 января 2011

Возможно, вы захотите проверить эту запись в блоге под названием «Классический ASP (ASP 3.0) не работает на 64-битных с 32-битными COM-объектами» http://blogs.msdn.com/b/robgruen/archive/2005/05/26/422328.aspx

он немного устарел, и автор неправильно называет обработчик ASP фильтром ISAPI (это расширение, а не фильтр), но в остальном информация кажется хорошей.

если обработчик asp скомпилирован только как 64-битный, вы не сможете загрузить в него 32-битный COM-объект независимо от того, что вы делаете.

автор упоминает кое-что о решении COM +. У меня такое ощущение, что 32-битный внепроцессный пакет COM + сможет загрузить этот 32-битный COM-объект, и ваша ASP-страница может выполнять межпроцессные вызовы этого пакета COM +.

удачи, Mark

...