Не удается печатать COM-объекты при вызове из ASP

Эта статья поможет устранить проблему, из-за чего com-объект отправляет выходные данные на принтер при вызове из active Server Pages.

Исходная версия продукта: Страницы активного сервера
Исходный номер базы знаний: 184291

Симптомы

Com-объект, который отправляет выходные данные на принтер, завершается сбоем при вызове из Active Server Pages (ASP), но работает правильно при вызове из интерактивного приложения. Этот COM-объект может быть либо коммерческим продуктом, например приложением Microsoft Office, либо пользовательским сторонним объектом. Распространенное сообщение об ошибке — "Ошибка принтера имени класса "800a01e2".

Причина

Стандартные API, используемые большинством объектов для печати, зависят от записей реестра, расположенных в HKEY_CURRENT_USER. Этот куст реестра является динамическим. В зависимости от контекста пользователя, в котором выполняется процесс, в этот куст будут загружены разные сведения. Страницы ASP выполняются в службах IIS, которые выполняются от имени учетной записи SYSTEM. При создании экземпляра COM-объекта в коде ASP он по умолчанию также будет выполняться от имени учетной записи SYSTEM. По умолчанию учетная запись SYSTEM не имеет принтеров, настроенных в реестре.

Разрешение

Чтобы устранить эту проблему, можно настроить принтеры для учетной записи SYSTEM. Чтобы настроить принтеры для учетной записи SYSTEM, выполните следующие действия:

Предупреждение

Для этого метода требуется изменить реестр с помощью Редактор реестра. Неправильное использование Редактор реестра может привести к серьезным проблемам на уровне системы, которые могут потребовать переустановки Windows для их устранения. Корпорация Майкрософт не может гарантировать, что любые проблемы, возникающие в результате использования Редактор реестра, могут быть решены. Используйте это средство на свой страх и риск.

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

  2. Запустите Редактор реестра (Regedit.exe).

  3. Выберите следующий ключ:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

  4. В меню Реестр выберите Экспорт файла реестра.

  5. В текстовом поле Имя файла введите c:\Devices.reg.

  6. Выберите следующий ключ:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts

  7. В меню Реестр выберите Экспорт файла реестра.

  8. В текстовом поле Имя файла введите c:\PrinterPorts.reg.

  9. Выберите следующий ключ:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

  10. В меню Реестр выберите Экспорт файла реестра.

  11. В текстовом поле Имя файла введите c:\Windows.reg.

  12. На кнопке Пуск выберите Выполнить. Откройте Devices.reg в Блокноте, введя блокнот Devices.reg в диалоговом окне Запуск .

  13. Замените текст HKEY_CURRENT_USER на текст HKEY_USERS\.DEFAULT.

  14. Сохраните файл. Затем импортируйте его в реестр, дважды щелкнув файл в Windows Обозреватель.

  15. Повторите шаги 13–15 для PrinterPorts.reg и Windows.reg.

Примечание.

Эти действия работают только для локальных принтеров.

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

Примечание.

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

  1. Убедитесь, что вы вошли на сервер в качестве пользователя, у которого установлены нужные сетевые принтеры.

  2. Откройте редактор реестра.

  3. Выберите следующий ключ:

    HKEY_CURRENT_USER\Printers\Connections

  4. В меню Реестр выберите Экспорт файла реестра.

  5. В поле Имя файла введите c:\printconns.reg.

  6. Чтобы открыть файл printconns.reg в Блокноте, нажмите кнопку Пуск, выберите Выполнить, введите Блокнот printconns.reg в поле Открыть , а затем нажмите кнопку ОК.

  7. Замените текст HKEY_CURRENT_USER текстом HKEY_USERS\.DEFAULT.

  8. Сохраните файл.

  9. Чтобы импортировать файл в реестр, дважды щелкните файл в Windows Обозреватель.

  10. Перезапустите службу очереди печати.