Москва: +7(495) 984-3499
Новосибирск: (383) 230-0255
ICQ Отдела продаж: 673-700-787, 635-877-793, 612-931-528, 623-036-077
Москва: (495) 984-3499
(495) 742-1790
 
(495) 742-1789
(495) 742-1791
Call Free: 8 (800) 333-0313
Новосибирск: (383) 230-0255
(383) 209-0488
(903) 901-3695

Ошибка открытия порта GodexEZPL.dll на Windows 2008 R2

Страницы: 1 2 След.
RSS
Ошибка открытия порта GodexEZPL.dll на Windows 2008 R2, Обсуждение: Ошибка открытия порта GodexEZPL.dll на Windows 2008 R2
 
Конфигурация:
Принтер Godex EZ-1100Plus подключён к принт-серверу под управлением Win 2008 R2 по Ethernet. Установлен драйвер Seagull 7.3.6 M-0.
Пользователи работают в 1C7.7 на терминальных серверах под управлением win 2008 R2. Принтер подключается для них командой
Код
net use LPT3 \\printserver\Godex
. На серверах установлена та же версия драйвера принтера. Физического порта LPT3 - нет.

Проблема:
При печати через GodexEZPL.dll возникает ошибка: "Невозможно открыть порт. Код ошибки: 2". При этом команда
Код
type C:\some_text_file.txt > LPT3
выполняется успешно и приводит к появлению задания в очереди печати принтера.
Если 1С запускать на компьютере под управлением Windows XP с тем же мэппингом порта и той же версией драйвера - печать проходит успешно.
Если в качестве принт-сервера выступает любой сервер под управлением windows 2003 - печать проходит успешно как с серверов под управлением Windows 2008 R2, так и из под Windows XP.
Печать средствами Windows успешно функционирует на любой платформе.

Вопрос:
Исходя из того, что печать из Windows корректно работает, задания пишутся в порт и ставятся в очередь, возникает вопрос: почему задания из GodexEZPL.dll не пишутся в порт (даже из под учётной записи Админситратора) и как этого можно избежать?
 
А версия dll какая?
Ошибка - не существует указанный файл. Укажите код, как подключаете.
 
Версия библиотеки GodexEZPL 1.0.11.3, последняя, насколько я понимаю.
А о каком файле идёт речь?
Код, по техническим причинам, приведу несколько позже.
 
порты в Windows открываются той-же функцией, как и файлы - CreateFile(...), поэтому и ошибки одни. Т.е. данная ошибка говорит, что указанного порта нет в системе.
Последняя 1.0.11.5. Правда там от 11.3 версии изменений мало и к открытию они не относились.
Заодно наберите в сессии cmd и change port. Интересно посмотреть маппинг.
 
Цитата
порты в Windows открываются той-же функцией, как и файлы - CreateFile(...), поэтому и ошибки одни. Т.е. данная ошибка говорит, что указанного порта нет в системе.
Последняя 1.0.11.5. Правда там от 11.3 версии изменений мало и к открытию они не относились.
Заодно наберите в сессии cmd и change port. Интересно посмотреть маппинг.

При этом в этот порт можно писать... Странно.

Буду благодарен, если дадите ссылку на последнюю версию и change list.

Вот вывод net use и change port. Имя пользователя и имя сервера заменены на %user% и %server%.
Код
C:\Users\$user>net use
Новые подключения будут запомнены.

Состояние   Локальный  Удаленный                 Сеть

-------------------------------------------------------------------------------

OK           LPT3      \\%server%\Godex               Microsoft Windows Network
Команда выполнена успешно.


C:\Users\%user%>change port
AUX = \DosDevices\COM1
COM1 = \Device\Serial0
 
Не все так просто. Я пока не представляю всей картины. Я так понимаю, пользователи работают в удаленной сессии (терминальный доступ), а команда net use подключает локальный порт. Если Вы локально запустите 1С, я уверен все будет работать.
 
Цитата
Не все так просто. Я пока не представляю всей картины. Я так понимаю, пользователи работают в удаленной сессии (терминальный доступ), а команда net use подключает локальный порт. Если Вы локально запустите 1С, я уверен все будет работать.

Да, пользователи работают в удалённой сессии. Эта схема для них успешно работает при печати через принт-сервер с windows 2003(старый сервер).
Если же мы пытаемся печатать через принт-сервер с windows 2008 R2(новый сервер), то возникает описанная проблема.
Кроме того, по Вашему совету протестировал с консоли(локально) терминального сервера: ничего не изменилось.
 
Цитата

Да, пользователи работают в удалённой сессии.
Ну значит LPT порт нужно подключать на сервере, а не на рабочих станциях. Причем, я подозреваю, что конкретно в сессии, а не локально на сервере. Хотя может и пройдет.

Цитата

Эта схема для них успешно работает при печати через принт-сервер с windows 2003(старый сервер).
Если же мы пытаемся печатать через принт-сервер с windows 2008 R2(новый сервер), то возникает описанная проблема.
Какая проблема? Я ничего не понял. EZPL.dll не имеет отношения к Принт-серверу. Она печатает напрямую в порт, минуя механизмы Windows.

Цитата

Кроме того, по Вашему совету протестировал с консоли(локально) терминального сервера: ничего не изменилось.
Опять не понял. Тестировали на сервере или на рабочей станции?
 
Простите, наверно я немного путано объяснил. Давайте попробую объяснить подробнее.
Цитата
Цитата

Да, пользователи работают в удалённой сессии.
Ну значит LPT порт нужно подключать на сервере, а не на рабочих станциях. Причем, я подозреваю, что конкретно в сессии, а не локально на сервере. Хотя может и пройдет.
Разумеется! Так и делаем, подключаем lpt-порт в каждой терминальной сессии.

Цитата
Цитата

Эта схема для них успешно работает при печати через принт-сервер с windows 2003(старый сервер).
Если же мы пытаемся печатать через принт-сервер с windows 2008 R2(новый сервер), то возникает описанная проблема.
Какая проблема? Я ничего не понял. EZPL.dll не имеет отношения к Принт-серверу. Она печатает напрямую в порт, минуя механизмы Windows.
Ещё раз в кратце суть проблемы:
1. Если на 2008 R2 терминальном сервере мы мапим LPT порт в принтер на 2008 R2 принт-сервере EZPL в порт печатать не может(получаем ошибку, описанную в первом посте), но запись в порт другими способами возможна.
2. Если на 2008 R2 терминальном сервере мы мапим LPT порт в принтер на 2003 R2 принт-сервере EZPL печатает нормально.
3. Если на тестовом ПК с XP мы мапим LPT порт в принтер на 2008 R2 принт-сервере EZPL печатает нормально.
Проблема в том что первая конфигурация не работает. Почему, с учётом, что 2 и 3 работают - пытаюсь понять.

Цитата
Цитата

Кроме того, по Вашему совету протестировал с консоли(локально) терминального сервера: ничего не изменилось.
Опять не понял. Тестировали на сервере или на рабочей станции?
Вы советовали протестировать на сервере, но не в терминальном сеансе, если я правильно понял.
Цитата
Если Вы локально запустите 1С, я уверен все будет работать.
Я протестировал на физической консоли сервера. Результат тот же.
Рабочие станции тут ни при чём. В нашей конфигурации 1С 7.7 запускается только в терминальных сеансах.
Есть одна рабочая станция разработчиков. О ней сказано в п.3 выше. На ней всё работает и она вне обсуждения.
 
Цитата
А версия dll какая?
Ошибка - не существует указанный файл. Укажите код, как подключаете.


Наши программисты 1С предоставили вот такой код:

Код
// Проверка наличия компоненты и подключение её
    Подключили = ПодключитьDLL("GodexEZPL.dll", "AddIn.GodexEZPL"); 

Вот тело функции:

Код
Функция ПодключитьDLL(ИмяDLL, ИмяAddIn, КаталогDLL = "", ВыдаватьДиагностику = 0) Экспорт
             
  Если ПустоеЗначение(КаталогDLL) = 1 Тогда
    КаталогDLL = СокрЛП(Константа.КаталогВнешнихКомпонент);
  КонецЕсли;
  ПолноеИмяDLL = КаталогDLL + ИмяDLL;
  
  Подключили = 0;
  
  Загрузили = 0;
  
  Если Найти(ИмяDLL, "dll") > 0 Тогда
    Попытка
      Подключили = ПодключитьВнешнююКомпоненту(ИмяAddIn); // вначале просто подключаем
      Если Подключили = 0 Тогда // попробуем загрузить
        Подключили = ЗагрузитьВнешнююКомпоненту(ПолноеИмяDLL);
        Загрузили = 1;
      КонецЕсли;
    Исключение
      Подключили = 0;
    КонецПопытки; 
  Иначе
    Попытка
      СоздатьОбъект(ИмяAddIn);
      Подключили = 1;
    Исключение
      КомандаСистемы("regsvr32 " + ПолноеИмяDLL);
      Загрузили = 1;
      Попытка
        СоздатьОбъект(ИмяAddIn);
        Подключили = 1;
      Исключение
      КонецПопытки;
    КонецПопытки;
  КонецЕсли;
  
  Если ВыдаватьДиагностику = 1 Тогда
    Если Подключили = 1 Тогда
      Если Загрузили = 1 Тогда
          Предупреждение("Компонента " + ИмяDLL + " успешно установлена", 30);
      Иначе
        Предупреждение("Компонента " + ИмяDLL + " уже была установлена на этом компьютере", 30);
      КонецЕсли;
    Иначе
        Предупреждение("Компоненту " + ИмяDLL + " подключить не удалось", 30);
    КонецЕсли;
  Иначе
    Если Подключили = 0 Тогда
      Сообщить("Не удалось загрузить внешнюю компоненту " + ПолноеИмяDLL + " на компьютере " + ИмяКомпьютера() + ". "
      + "Обратитесь, пожалуйста, в техотдел.", "!");
    КонецЕсли;
  КонецЕсли;
  
  
  Возврат Подключили;

КонецФункции
Страницы: 1 2 След.