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

В этой статье описывается решение проблемы, из-за которой COM-объект отправляет выходные данные на принтер при вызове с Active Server Pages.

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

Симптомы

COM-объект, который отправляет выходные данные на принтер, завершается с ошибкой при вызове из ASP-страниц, но корректно функционирует при вызове из интерактивного приложения. Это COM-объект может представлять собой коммерческий продукт, например приложение Microsoft Office, или пользовательский сторонний объект. Распространенное сообщение об ошибке: "ClassName Error" 800a01e2 "Error Printer".

Причина

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

Решение

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

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

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

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

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

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

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\Current Version\Devices

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

  5. В текстовом поле имя файла введите к:\девицес.рег.

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

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\Current Version\PrinterPorts

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

  8. В текстовом поле имя файла введите к:\принтерпортс.рег.

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

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\Current Version\Windows

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

  11. В текстовом поле имя файла введите к:\виндовс.рег.

  12. На кнопке Пуск выберите выполнить. Откройте окно Devices. reg в блокноте, введя Notepad Devices. reg in Run .

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

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

  15. Повторите шаги с 13 по 15 для Принтерпортс. reg и Windows. reg.

Примечание

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

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

Примечание

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

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

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

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

    HKEY_CURRENT_USER\Printers\Connections

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

  5. В поле имя файла введите к:\принтконнс.рег.

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

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

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

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

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