
Проблема
Поскольку поддержка серверов Windows 2003 заканчивается 14 июля, мы переносим все запланированные задачи на сервер Windows 2008 R2.
Мы используем базу данных Microsoft(MS) Access 2003(mdb) для обработки различных внутренних процессов, которые дополняют взаимодействие пользователей и клиентов с нашей системой.
Один из внутренних процессов MS Access, являющийся причиной этого вопроса, отказывается печатать, если пользователь не вошел в систему.
Процесс бэкэнда заполняет временную таблицу, которая позже используется для заполнения отчета, который должен быть распечатан. Этот отчет имеет встроенный запрос, связанные изображения и сохраненный принтер по умолчанию.
Пользователь, выполняющий запланированные задачи, является пользователем домена.
Что мы предполагаем, что это может быть
Сессия 0 Изоляция- В Access появляется очень маленькое окно печати, которое показывает, что вы находитесь на странице X из N. С этим окном невозможно взаимодействовать. Я чувствую, что это может быть виновником, но все, что мы пробовали, не помогло остановить это.
Что мы пробовали
- Создана папка «Рабочий стол» в системном профиле
- Убедитесь, что пользователь является локальным администратором с повышенными привилегиями.
- Запуск вручную при входе в систему (это работает)
- Создание миниатюрной версии приложения, выполняющего небольшой образец задания печати.
- Настройка запланированной задачи для запуска, независимо от того, вошел ли пользователь в систему или нет. Независимо от этого, другие процессы в базе данных MS Access продолжают работать, и мы получаем пустой отчет для процесса, который не печатается.
Текущее решение
Мы оставляем пользователя домена в системе.
решение1
Эта проблема может легко возникнуть при печати на сессионном принтере.
HKEY_Current_User\Printers\Connections (сеансовые принтеры)
против
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers (локальные принтеры)
Любой принтер, установленный через сетевой ресурс, попадает в эту категорию. Попробуйте еще раз с принтером, установленным с локальной очередью tcp/ip, этот принтер будет доступен всей системе.
решение2
Элиас, ты посмотрел на запланированную задачу и поставил галочку напротив "запускать независимо от того, вошел ли пользователь в систему или нет"? Похоже, что эта галочка не стоит, поэтому когда задача пытается запуститься, она не может.
решение3
Похоже, что сами принтеры не определяются, когда процесс запущен. Вы пробовали добавить какой-нибудь отладочный код для вывода в файл и посмотреть, где он застревает? Я обнаружил, что процессы, которые зависают в VBA, не генерируют много информации в средстве просмотра событий и обычно требуют большего количества отлова ошибок в коде.
Я видел проблему изоляции сеанса 0 и видел обходные пути, но все примеры, с которыми я сталкивался, были связаны с Excel.
Ниже приведено объяснение того, на что влияет сеанс 0.
https://msdn.microsoft.com/en-us/library/windows/hardware/dn653293%28v=vs.85%29.aspx
решение4
Если вы установите UAC на минимальное значение, улучшит ли это ситуацию? Для этого нажмите «Пуск», затем «Выполнить». Введите msconfig в поле «Выполнить»/«Приглашение» и нажмите «ОК». Нажмите вкладку «Инструменты». Нажмите «Изменить параметры UAC», а затем нажмите «Запустить». Перетащите ползунок в самый низ. ОК и перезапустите сервер.
Когда вы переносили задачу, вы ее пересоздавали? Отличный способ переноса задач между 2003 и 2008 годами — открыть планировщик задач на 2008, подключиться к серверу 2003 и экспортировать задачи. Затем вы можете указать планировщику задач обратно на сервер 2008 и импортировать задачи. Если задача выполняется с результатом 0x0, я бы сказал, что проблема находится за пределами самой запланированной задачи.
Можете ли вы подтвердить, что принтер печатает при отправке тестовой страницы? Возможно, стоит сравнить настройки принтера на старом и новом серверах, если вы этого еще не сделали.