Oracle oci.dll в каталоге ASP.NET не может быть удален / не работает - PullRequest
5 голосов
/ 27 января 2010

Я выполнил следующие указания: http://splinter.com.au/blog/?p=156, пытаясь использовать более новую версию ODP.NET без установки клиента Oracle 11g. Пока я следил за всем, кроме перезапуска IIS.

Однако это вызвало некоторые проблемы, и мне действительно любопытно, почему. Если я пытаюсь использовать ODP.NET, меня встречает пустое исключение, возникающее при попытке соединения Oracle (например, ConnectExample.Open ()).

Но что самое любопытное: я не могу удалить oci.dll. Он говорит, что он используется. Что может быть с помощью этой DLL? Что именно ASP.NET делает с нативной dll, когда она находится в каталоге Bin? Я подумал, что это может быть связано с oci.dll, но если я использую dll аналогичным образом в настольном приложении WinForm, то oci.dll не блокируется, и я могу удалить его свободно.

Кроме того, после того, как я попытался использовать его, обычный System.Data.OracleClient перестал работать. Теперь он генерирует исключение, которое OCIEnvCreate возвращает с -1.

Я попытаюсь перезапустить IIS, и, надеюсь, это исправит это, но я хотел бы знать, что здесь происходит (и если это можно решить без перезапуска IIS). У кого-нибудь есть идея?

Редактировать: я пытался перезапустить IIS, но это не помогло

Редактировать # 2: Я не думаю, что сформулировал этот вопрос очень хорошо, но это было из-за того, что я предполагал, что перезапуск IIS будет работать. Теперь мне просто нужно знать, почему это не работает. В Googling для подобных проблем я встречал только 2 сообщения на форуме, в которых рассказывалось о моей конкретной проблеме: Oracle ODP.NET возвращает пустое исключение при попытке подключения. Вот ссылки на них:

http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296

http://forums.oracle.com/forums/thread.jspa?threadID=549864

Корейская ссылка выше самая интересная. У них есть полная установка, которая заставляет меня подозревать, что моя проблема не с файлами или отсутствующими файлами. Интересно, что они имеют в виду под «производственными серверами, выбрасывающими пустые исключения, если выполняется вызов библиотеки OCI до установки ODP»?

Редактирование / обновление № 3: У нас есть сервер интрасети для нашего отдела, который я смог протестировать сегодня. Я добавил необходимые DLL в папку Bin, и все работало без перезапуска IIS. Я не спрашиваю Я попробую еще тестирование на этом сервере, чтобы посмотреть, смогу ли я повторить проблему

Редактирование # 4 (одиссея продолжается): я определил, что oraocci11.dll (DLL-интерфейс интерфейса вызовов C ++) изначально необходим ASP.NET (или библиотеке ODP.NET), чтобы даже найти DLL-файлы 11g клиента, после этого oraocci11.dll, по-видимому, никогда не будет использоваться снова и может быть удален. Не уверен, что это значит для моей проблемы, но так как это добавляет сюда базу знаний, я решил упомянуть об этом

Редактировать # 5: я добавил mfc71.dll и msvcr71.dll, 2 системных файла Windows, связанных с C / MFC, в каталог Bin, когда обнаружил, что они нужны для ODP.NET (или, по крайней мере, для клиент). Это, по крайней мере, заставило вещи остаться на старой знакомой ошибке «Клиент не совместим». Я удалил эти 2 DLL и, конечно же, вернулся к тем же ошибкам, что и выше. Однако добавление их назад не устраняет эти ошибки, поэтому мне придется снова выполнить сброс IIS.

Ответы [ 5 ]

2 голосов
/ 15 июня 2011

Типичный опыт Oracle.

У меня была такая же проблема. Разлочители не работают. Я попробовал несколько - все сообщают, что файл вообще не заблокирован, но затем сообщают, что они не могут удалить его.

Остановка IIS и большинства неосновных служб Windows не работает.

Решение - переименовать файл, перезагрузиться и удалить его. По некоторым причинам Windows позволяет вам переименовывать заблокированный файл и сохраняет его заблокированным, но после перезагрузки попытка заблокировать «oci.dll» не удалась, так как он больше не существует под этим именем.

2 голосов
/ 28 января 2010

Вместо (или также) остановки IIS остановите службу World Wide Web Publishing с помощью services.msc, а затем внесите изменения.

Мы обнаружили, что для графического элемента управленияDLL, используемая приложением asp.net, простой остановки IIS было недостаточно, так как вы не смогли удалить файл (или вставить и т. Д.).Но как только служба публикации в Интернете была остановлена, ее можно было удалить или перезаписать ...

1 голос
/ 28 января 2010

Что касается DLL, вам придется остановить IIS, удалить их, а затем запустить IIS. Это потому, что они являются родными DLL, а не C # dll. Функция теневого копирования в C # не распространяется на нативные библиотеки DLL, поэтому они заблокированы.

Что касается оракула, я отправил вам по электронной почте кое-что, чтобы попробовать ... действительно, мы должны обновить эту страницу SO, когда вы найдете решение.

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

Есть 3 вещи, о которых я знаю, которые позволят вам удалить этот и другие файлы, которые являются частью клиента Oracle Data Access:

1.) Остановите пулы приложений в IIS.

2.) Закройте Visual Studio.

3.) Перезагрузите машину.

0 голосов
/ 02 февраля 2010

Если IIS не является процессом, блокирующим файл, и вы действительно застряли, Unlocker может помочь увидеть, что фактически блокирует файл, а также снять эти блокировки и принудительно удалить файл.

Получите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...