Проблемы зависания 1С 7.7 при печати документов под терминалами, Windows Server 2003 64 bit

Столкнулся с проблемой зависания 1С 7.7 при работе под терминальным сервером Windows server 2003 64bit. Проблема не имела никакой системы, и могла не проявляться месяцами, но одно точно, она обострялась по мере увеличения нагрузки на сервер печати (отчетные периоды). Проблема отражалась в логах системы в виде ошибок 1С «Ошибка приложения 1cv7s.exe, версия 7.70.0.27, модуль mfc42.dll, версия 6.0.8665.0, адрес 0x0000eb5b» и других подобных, кроме ошибок самой 1С других системных ошибок или ошибок приложений не было. Долгие поиски привели к не очень логичному решению.
Во всем оказалось виноват переключатель раскладки клавиатуры ctfmon.exe. Проблемы с ctfmon.exe описывались еще совместно и с другими приложениями, такими как продукты MS Office, либо Open Office.

Решение простое, ну и может не совсем элегантное, но оно работает. Надо просто удалить ctfmon и вместо него использовать Punto Switcher (Как вариант, можно взять переключатель из предыдущих версий windows «internat.exe», но так как у меня 64 битная версия, с этим у меня возникли проблемы. Но если вам он нужен, взять его можно тут.).

Всю процедуру можно делать на работающем сервере и с работающими клиентами.

1. Заходим в C:\WINDOWS\system32\dllcache и удаляем ctfmon там. Это важно! в этом месте его надо удалить в первую очередь, ведь именно отсюда он восстановится в случае удаления его из system32.
2. Далее удаляем его из папки C:\WINDOWS\SysWOW64 и C:\WINDOWS\system32 предварительно надо будет снять все процессы ctfmon у всех пользователей включая Администратора, иначе удалить не даст (при удаление у пользователей исчезнет возможность переключения раскладки, они останутся на той раскладке, на какой были в момент удаления).
3. Устанавливаем Punto Switcher, при необходимости убираем авто переключение, звуки и т.д.
4. Для возобновления возможности переключать раскладку, пользователям всего лишь надо пере зайти в терминал (только с обязательным завершение сеанса)

Для профилактики можно сделать еще кое чего. 1С сохраняет в реестре сведения о последнем принтере, на который она печатала. Вернее сказать 1C запоминает все настройки печати каждого отчёта (хотя бы раз распечатанного).
Для того чтобы избавиться от зависания при печати в 1с 7.7 (точнее не при печати, а при заходе в свойства принтера, или при первой печати за день) нужно сделать следующее: удалить из реестра все разделы (именно разделы, а не ключи) с именем moxel. Оно конечно снова забьется, но периодическая очистка полезна.

Конец!

Смотрите так же:

Проблемы зависания 1С 7.7 при печати документов под терминалами, Windows Server 2003 64 bit: 11 комментариев

  1. Уточнение Windows Server 2003 32 битный.

    Сейчас ошибка такая «Ошибка приложения 1cv7s.exe, версия 7.70.0.25, модуль gdi32.dll, версия 5.2.3790.4396, адрес 0x0000d666.»

    Поставил Punto, но хотел, если после ребута ничего не изменится, попробовать и internat.

    1С 8 раньше жалоб не было. Точнее смогу сказать только завтра, бухгалтера уже разбежались.

    1. После установки Punto надо еще удалить ctfmon и убить все его процессы, под всеми пользователями, иначе не будет эффекта.

  2. Да, для каждой запущенной 1с копии используется отдельная терминальная сессия. При запуске стартует утилитка выбора версии 1с(7.7 или 8.2) а затем уже по выбору пользователи выбирают нужную базу. Сейчас крутится порядка 30 баз от 5 различных организаций.
    К сожалению, за давностью лет забыл ВСЕ причины заставившие использовать screwdriver, но одно я помню точно, с драйверами некоторых принтеров творились такие чудеса, что я материл руководителей которые покупали дешевые софтовые принтеры большими пачками в целях «экономии». Screwdriver позволяет печатать в любом возможном варианте. То есть проблема с установкой дровок на сервер которые не поддерживают по каким то причинам Windows server 2003 решилась сразу. К сожалению стабильной 100% работы даже со screwdriver не удалось добиться и проблема с вылетами изредка всплывает.
    Мне кажется проблема вылетов тоже в screwdriver, но смущает тот факт, что ошибка в журналах в момент вылета, в точности как у вас.
    Настройка screwdriver до примитива простая. Есть серверная часть и клиентская. После установки клиентской части выбираешь какие принтеры прокидывать, а какие нет и все…
    Версия screwdriver 4.4.3.38
    Пробовал поновее, но почему то не удалось в тот момент ее вылечить.

    1. Ошибки такие, потому что в любом случае используется служба печати. 1с 7.7 была выпущена давно, и не производителем не гарантируется ее работа в 64 битной среде, да еще и на 2003 сервере.

      По идее после замены на internat и добавления эски в исключения может появляться только такая ошибка «Зависшее приложение 1cv7s.exe, версия 7.70.0.27, зависший модуль hungapp, версия 0.0.0.0, адрес 0x00000000.»
      Это уже точно из за принтеров или вашего screwdriver, ибо эта ошибка значит, что винда уже не понимает откуда идет сбой.

      Попробуйте провести эксперимент на одном каком нибудь пользователе, уберите screwdriver и организуйте работу принтеров стандартными средствами, но при этом все же замените ctfmon.

      Вся среда для пользователя создается отдельная, и если дело было в screwdriver, то ошибки должны пропасть.

      А 1с 8 работает нормально? Вот с ней не должно быть вообще проблем. Если с ней проблемы, то точно уже проблема с screwdriver.

  3. Отдельная сессия на один и тот же сервер?
    Зачем вы используете screwdriver внутри сети? Почему не используете стандартные возможности терминалов?

    Расскажите подробнее про использование screwdriver, мне кажется дело может быть в нем.

  4. В исключения DEP 1с сейчас добавил конечно для проверки, но проверить смогу только после ребута сервака. В реестре разделы moxel удалял. Бехгалтерия говорит что вышибает именно когда открыто больше чем одна терминальная сессия. У меня для каждой базы получается отдельная сессия. Шэла у пользователей нет, принтеры прокидываю с помощью screwdriver. Зависает или выкидывает именно в момент нажатия на кнопку печать. Дополнительные параметры они обычно не трогают.

  5. Попробовал данное решение, к сожалению ошибка осталась. Вышибает именно при нажатии на печать, причем даже в те моменты когда нагрузки на сервер нет.

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

      1. Заменен ctfmon.exe
      2. 1с добавлена в исключения «Предотвращение выполнения данных».
      3. Почистить реестр

      Как выяснилось, у меня большинство зависаний происходило в момент захода пользователя в доп настройки принтера, для включения дуплекса. В этот момент драйвер HP на лету подставляли языковой скин, а если пользователи нервничали и несколько раз тыкали на свойства. То в момент выбора скина все зависала.

      Абсолютно полностью я избавился от зависания выполнив 3 пункта, и настучав нервным пользователя по рука. Ну и конечно же установив последние версии драйверов на все принтера, а их у меня под терминалом больше 20.

    1. Методом научного тыка все делалось. Просто вспомнилась история времен появления Office XP, там была подобная проблема с Windows XP в связке. И это была рекомендация самой Microsoft, только они советовали заменить ctfmon.exe аналогом из Windows 2000.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.