Ошибка Server.CreateObject() с 32-разрядной версией Windows и IIS 7
Windows 7 32 бит, IIS 7.5.760016385
Я создал DLL в Visual Basic 6.0 и пытался использовать его из классического ASP-кода:
set obj = Server.CreateObject("a.b")
Я получаю следующую ошибку:
006 ASP 0178
Ошибка доступа к серверу .CreateObject
При вызове Server.CreateObject не удалось выполнить проверку разрешений. Доступ запрещен этому объекту.
err.number = -2147024891
Я попытался создать пользователя iusr_cmpname и предоставить ему права на веб-сайте по умолчанию и в виртуальном каталоге этой страницы ASP. У меня есть REGSVR32'd. Dll.
Я перешел к разделу "Включение и выключение функций Windows" и выбранные функции IIS/World Wide Web Services/Application Development, затем ПРОВЕРЕНА из ASP, ASP.net, ISAPI-расширений и фильтров ISAPI.
Я следил за многими выводами в разных группах новостей, но я могу преодолеть эту проблему.
Мы пробовали это в прошлом году, год и 1/2 назад и имели ту же проблему. Поскольку мы не смогли преодолеть эту проблему, мы вернулись к Windows NT. У нас никогда не было этой проблемы на NT.
Теперь мы пытаемся снова пройти мимо этого, чтобы снова перейти на Windows 7. Похоже, что у многих людей была эта проблема, но любое решение, которое они нашли и опубликовали, похоже, не то, что мне нужно.
Любая помощь будет оценена. Спасибо.
Ответы
Ответ 1
Я настоятельно рекомендую использовать Procmon, чтобы найти нарушение доступа. У меня была аналогичная проблема много лет назад, и это было единственное, что ее разрешило. В этом случае оказалось, что в системной папке temp отсутствуют разрешения.
Если вы публикуете результаты Procmon, я могу изменить этот ответ, чтобы быть более полезным.
Ответ 2
Проблема, похоже, связана с тем, что IIS не имеет доступа к вашей пользовательской VB6 Active X dll в файловой системе.
Я зарегистрировал пользовательскую dll, которую я создал, в том же каталоге, что и веб-приложение по умолчанию, и смог получить ASP для создания объекта.
Вот что я сделал:
-
Чистая установка 64-разрядной версии Windows 7 Professional, SP1.
-
Включить функцию Windows ASP
-
Этот шаг ТОЛЬКО для 64-разрядной Windows - с помощью диспетчера IIS включите 32-разрядные приложения для пула приложений по умолчанию.
![enable 32-bit application pool]()
- Создайте простую VB6 Active X dll (имя класса - "CXUtils.Utils" ), которая добавляет два входных номера и возвращает результат.
Utils.cls:
Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Sum = a + b
End Function
- Это важный шаг - в командной строке администратора зарегистрируйте DLL Vb6 Active X в местоположении веб-приложения по умолчанию:
C:\Inetpub\Wwwroot
![Register Custom VB6 DLL]()
- Создайте и установите простую страницу asp, которая создает экземпляр dll сверху. Место установки - это местоположение веб-приложения по умолчанию C:\inetpub\wwwroot
Default.asp:
<%@ Language=VBScript %>
<%
Option Explicit
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
Function Sum(a, b)
Sum = a + b
End Function
Function Sum2(a, b)
Dim adder
set adder = Server.CreateObject("CXUtils.Utils")
Sum2 = adder.Sum(a, b)
set adder = nothing
End Function
%>
<html>
<head>
<title>Add</title>
</head>
<body>
<b>2 + 3</b> = <%= Sum(2,3) %><br />
<b>3 + 4</b> = <%= Sum2(3,4) %>
</body>
</html>
- Просмотрите веб-приложение и просмотрите результаты.
![Sample asp page results]()
Мои извинения, если это не все компилируется - было много редактирования, чтобы правильно форматировать.
Ответ 3
Эта страница предполагает, что проблема может быть правами доступа, назначенными для среды выполнения VB. Попробуйте назначить всем пользователям права на чтение и выполнение на Msvbvm60.dll.
http://support.microsoft.com/kb/278013
Ответ 4
Я думаю, что у меня была аналогичная проблема. Я пытался сделать интерактивный код отладки в DLL VB6, который был запущен в VB6 IDE из классического приложения ASP. Когда приложение выполнило оператор Server.CreateObject, оно возвратило следующую ошибку:
Объект сервера: 006 ~ ASP 0178 ~ Server.CreateObject Ошибка доступа ~ Ошибка вызова Server.CreateObject при проверке разрешений. Доступ запрещен этому объекту.
Кстати, я запускаю IIS 7.5 в среде Windows 7. Я наконец нашел статью Microsoft, в которой говорилось, что проблема связана с отсутствием записи реестра для VB ASP Debugging в DCOM и/или неадекватными разрешениями с DCOM, а не с IIS. URL-адрес статьи http://support.microsoft.com/kb/q259725. Я реализовал Work Around # 1. Одна перезагрузка позже, я мог бы вступить в VB DLL-код из ASP. Мел один для Microsoft, и я не так часто говорю: -)
Ответ 5
Другим подходом, который может работать, является установка DLL в качестве приложения DCOM на dcomcnfg. Он будет работать под разными учетными данными.