Проблема с регистрацией dll #622750


#0 by pers200590
Здравствуйте, дорогие форумчане. Не судите строго.Ранее создавал тему "Windows server 2008 R2 слетает зарегистрированный dll". Проблема до сих пор не решена, слетает зарегистрированная dll эквайринговой системы. На инфостарте нашел статью "Решение проблем с регистрацией внешних компонент в терминале". Посмотрел что у меня в конфигураторе: #Если ВебКлиент Тогда #Иначе Попробовал как в статье второй вариант, dll  вообще не регистрируется и пишет "Драйвер не установлен и версия не определена. Подскажите как можно подключить dll  другими способами в терминале и как в статье на инфостарте. Заранее спасибо
#1 by pers200590
платформа стоит 8.2.15.319
#2 by pers200590
люди помогите разобраться
#3 by pers200590
дорогие форумчане,неужели так тяжело помочь.На форуме очень много тем насчет моей проблеме.но в них нет ничего путного
#4 by Balabass
Запусти от имени админа.
#5 by Balabass
А вообще сначало удали и заново поставь. У меня такая хрень была с 1с 7.7. От имени админа стартанул - все ок стало.
#6 by pers200590
регистрирую dll я всегда от имени администратора. Но почему dll слетает. Вот и я подумал , прочитав на инфостарте и на других сайта. может дело в процедуре подключения или как то напрямую подключить dll.
#7 by ICWiner
Насколько я в теме - напрямую ты ее не подключишь без регистрации в винде. Проблема не в 1с.
#8 by Spacer1966
Здравствуйте! Я автор статьи на инфостарте "Решение проблем с регистрацией внешних компонент в терминале". Попробовал разобраться в вашей проблеме. Для начала попробовал установить драйвер эквайринговой системы на локальном компе в УТ 11. Пишет "Драйвер не установлен". Значит проблема с регистрацией dll. В справочнике "ПодключаемоеОборудование" есть макет "ДрайверСБРФЭквайринговыеТерминалы". В нем собственно и хранится нужная нам dll. Щелкаем на этом макете и нажимаем кнопочку "Выгрузить в файл". Файлу даем любое имя и расширение zip. Открыв архив видим 4 файла, в том числе нужный нам SBRFCOM.dll. Пробуем регистрировать его с помощью команды regsvr32.exe например в папке C:|WindowsSysytem32. Регистрация проходит успешно. Но 1С все равно драйвера не видит. С помощью программы OLECOM Object Viewer от  можно определить что dll действительно успешно зарегистрировалась и в системе имеется COM-объект с ProgID = AddIn.SBRFCOMObject. Однако ОбъектДрайвера = Новый("AddIn.SBRFCOMExtension") не создается. На этом же форуме нашел статью в которой описывается эта проблема: В последнем топике дается рекомендация: "Обязательно необходимо в папку bin где лежит платформа положить следующие файлы: GATE.DLL - это вспомогательная компонента для драйвера sb_kernel.dll - это видимо тоже какая то вспомогательная dll SBRFCOM.DLL - собственно сам dll взаимодействия с 1С" Также можете посмотреть вот эту статью: Здесь также пишут что наличие файлов GATE.DLL и sb_kernel.dll обязательно. Эти файлы можно получить у работников сбербанка либо скачать в этой публикации: После копирования этих файлов в каталог где зарегистрирована SBRFCOM.DLL в 1С видим следующее: "Драйвер установлен", "Версия не определена". Это нормально. Данная dll не сообщает 1С о своей версии. Таким образом проблема с регистрацией dll решена. Далее используйте рекомендации в моей статье по поводу регистрации в терминале. Я думаю все должно заработать.
#9 by pers200590
Огромное спасибо, что откликнулись. С эквайринговым терминалом мучаюсь уже где то полугода. В конфигурации Розница 1.0 терминал мне удалось подключить без проблем. В конфигурации УТ 11 когда был один терминал и обычный файловый вариант у меня все прекрасно работало, когда увеличилось количество рабочих мест и появился второй терминал, появились проблемы.Была установлена Windows server 2008 R2 x64 + RDP. И начались проблемы описанные на форуме инфорстарта по адресу . Помогите разобраться сколько мучаюсь и обращаюсь никто не может помочь.
#10 by Spacer1966
Я так понимаю что со сканерами проблема решена. Осталась только с эквайринговым терминалом и с тем что слетает зарегистрированная dll. А вы сделали все так как описано в моей статье? 1. Регистрируем внешнюю компоненту утилитой regsvr32.exe на сервере терминалов в папке в папке C:WINDOWSSYSWOW64. После этого все равно проблема остаются?
#11 by pers200590
Да все сделано по вашей статье 1. Зарегистрирована dll на сервере терминалов в папке и в папке C:WINDOWSSYSWOW64. под администратором #Если ВебКлиент Тогда #Иначе При этом вообще пишет Драйвер не установлен и версия не определена. Попробовал еще и пользователя зарегить под администратором. также ничего не помогло.Может есть какое ограничение у пользователей в терминале на регистрацию и использование dll. На просторах интернета нашел статью
#12 by pers200590
и кстати у все dll хранились и регились ранее в папке пользователя ExtCompT
#13 by Spacer1966
Ну, в 64-х разрядной Windows отведены специальные папки для dll: System32 для тех что могут работать в 64-х разрядной среде и SysWOW64 для dll изначально написанных под 32-х разрядную среду исполнения. Эта dll для эквайрингового терминала скорее всего была написана под 32-х разрядную среду. Поэтому мне кажется правильнее ее поместить в папку C:WINDOWSSYSWOW64, а не в папку пользователя ExtCompT. Ограничения на регистрацию dll у пользователей терминала конечно же есть. Об этом как раз я и писал в своей статье. У них нет прав на запись в ветку системного реестра HKEY_CLASSES_ROOT. Поэтому происходит отказ в регистрации внешней компоненты. Я попробовал у себя под терминалом Windows server 2008 R2 x64 установить драйвера и посмотреть что получится. У меня все нормально. Пишет "Драйвер установлен", "Версия не определена". Так и должно быть.
#14 by Spacer1966
Кстати, dll регистрировали под администратором? regsvr32.exe вызывали из папки SysWOW64? Дело в том что regsvr32.exe есть еще в папке System32. Вызывать нужно именно тот что в папке SysWOW64.
#15 by pers200590
Дело в том что dll у меня лежит также и в C:WINDOWSSYSWOW64 и в папке пользователя ExtCompT
#16 by pers200590
и у меня все работало, но только отваливаливась dll 2-4 раза за день
#17 by Balabass
Ого... Знатный мужик однако!
#18 by Spacer1966
Это не имеет значения. Их может быть хоть десять в разных местах. Используется та которая последний раз была зарегистрирована утилитой regsvr32.exe и сведения о которой прописаны в реестре.
#19 by Spacer1966
Ну а сейчас работает и отваливается или вообще не работает и пишет что "драйвер не установлен"? Если отваливается то нужно определить что при этом происходит. Проверить действительно ли при этом теряется информация о регистрации компоненты в реестре. Вы справочник "Рабочие места" смотрели? Там нет такого что создается несколько рабочих мест для одной связки "Пользователь+Компьютер"?
#20 by pers200590
До 28.07.2012 работало, но отваливалось, после вашей статьи пытался изменить код в ПодключенииВнешнейКомпоненты на другой как у Вас в статье.после этого вообще писал "Драйвер не установлен" регистрация не помогала все вернул на место и все стало на свои места т.е "Драйвер установлен" но несколько раз в день стал отваливаться. Как определить что при этом происходит?Как проверить?Можнт поможет сменить код как в вашей статье на принудительную регистрацию так как известно где файлы лежат или как то так. В справочнике "Рабочие места" была такая проблема, что при каждом входе в программу создавались новые рабочие места с разными идентификаторами но одинаковыми пользователями.
#21 by pers200590
???
#22 by Spacer1966
По порядку. Для того чтобы драйвер нормально подключался в 1С необходимо: 1. Наличие в одной папке (допустим в C:WINDOWSSYSWOW64) файлов SBRFCOM.DLL, GATE.DLL и sb_kernel.dll. 2. Файл SBRFCOM.DLL должен быть зарегистрирован в каталоге C:WINDOWSSYSWOW64 с помощью утилиты regsvr32.exe из каталога C:WINDOWSSYSWOW64 Что имеем в стандартном варианте в УТ11? Драйвер устанавливается из макета "ДрайверСБРФЭквайринговыеТерминалы" справочника "ПодключаемоеОборудование". При этом 1С извлекает компоненту из двоичных данных макета и сохраняет ее во временной папке пользователя, например "C:Documents and SettingsUserLocal SettingsTemp1032v8_4_12.tmp". Затем 1С регистрирует компоненту по этому пути, и дальше с ней уже можно работать. Чтобы компонента зарегистрировалась, необходимо чтобы у пользователя были права на изменение ветки реестра HKEY_CLASSES_ROOT. Допустим, права у пользователя есть и компонента т.е. файл SBRFCOM.DLL сохраненный 1С  под именем v8_4_12.tmp в папке ""C:Documents and SettingsUserLocal SettingsTemp1032" была успешно зарегистрирована. Но! В этой папке в таком случае будут отсутствовать файлы GATE.DLL и sb_kernel.dll. Как же у вас тогда все работало? Что необходимо в моем варианте? 1. Все три файла SBRFCOM.DLL, GATE.DLL и sb_kernel.dll должны находиться в одном каталоге C:WINDOWSSYSWOW64. 2. Файл SBRFCOM.DLL должен быть зарегистрирован под администратором в каталоге C:WINDOWSSYSWOW64 с помощью утилиты regsvr32.exe из каталога C:WINDOWSSYSWOW64. В УТ11 в общем модуле МенеджерОборудованияКлиент есть процедура ПолучитьОбъектДрайвера в этой процедуре должен быть код: Метод ПодключитьВнешнююКомпоненту должен найти уже зарегистрированный нами драйвер в системе по ProgID = AddIn.SBRFCOMObject.
#23 by Spacer1966
По поводу того что в справочнике "Рабочие места" при каждом входе в программу создаются новые рабочие места с разными идентификаторами но одинаковыми пользователями. Причина здесь в том что файл 1cv8u.pfl в папке C:Documents and SettingsUserLocal SettingsApplication Data1C1Cv82 имеет неправильную структуру, либо он пустой. Этот файл должен иметь следующую структуру: { {""}, { {"Universal", {"ClientID", {"#",fc01b5df-97fe-449b-83d4-218a090e681e,ad7f6d3b-179f-4770-a2cc-0e9274d75e29},""}, { {""} } }, {""} } } где ad7f6d3b-179f-4770-a2cc-0e9274d75e29 как раз и есть идентификатор клиента. Значение fc01b5df-97fe-449b-83d4-218a090e681e по всей видимости является идентификатором компьютера. Содержимое этого файла можно скопировать у другого пользователя. Затем необходимо заменить идентификатор клиента на другой, взяв нужный нам идентификатор из справочника "РабочиеМеста".
#24 by pers200590
По поводу проблемы в справочнике "Рабочие места", решение которое вы написали я нашел на форуме Инфостарта и успешно его применил
#25 by pers200590
У меня по пути C:WINDOWSSYSWOW64 лежит все один файл SBRFCOM.DLL -  ок остальные скопирую В папке пользователя у меня лежали все файлы предоставленные СБЕРБАНКОМ. Как опробую отпишусь
#26 by pers200590
Сделал все что написано в 2 терминала заработали в течение дня все работало и под вечер Кассиры опять сообщили. что появилось сообщение о том что проверьте настройки типа слетела dll  и в справочнике Подключения торгового оборудования "Драйвер не установлен"
#27 by pers200590
?
#28 by Spacer1966
Трудно сказать с чем это связано. У меня тоже такое иногда случается, но очень редко. Может какие-то баги винды или еще что. Решается завершением терминальной сессии пользователя и повторным входом на терминал. Что может быть в вашем случае? У меня вариантов два: 1. 1С попыталась вновь получить драйвер из макета справочника "ПодключаемоеОборудование" и зарегистрировать его в папке пользователя. Из-за этого предыдущая регистрация драйвера в реестре слетела. Тут нужно проверить код в конфигураторе. 2. В системном реестре исчезла информация о регистрации драйвера не по вине 1С, а по какой-то другой причине. Тут уже смотреть реестр и выяснять когда и почему это произошло.
#29 by pers200590
Подскажите, пожалуйста как проверить Ваши два варианта. Сегодня опять слетало. Перезапуском сеанса пользователя проблема не решается
#30 by pers200590
у меня шеф уже психует
#31 by Spacer1966
Проверьте ветку реестра HKEY_CLASSES_ROOTWow6432NodeCLSID{B36F6A41-5BB1-4B59-9797-BE55B61C9959} В параметре InprocServer32 должен быть прописан путь C:WindowsSysWOW64sbrfcom.dll В параметре VersionIndependentProgID должно быть "AddIn.SBRFCOMObject" Есть ли вообще эта ветка реестра после того как слетел драйвер? Правильный ли путь в ней прописан? Проверьте сообщения в журнале событий Windows, возможно там есть какие-то сообщения.
#32 by pers200590
Интересная ситуация получается. при открытии обработки "Свертка итогов" и при отплате по платежкой карте выдалось опять сообщение "проверьте настроки терминала" не загружена обработка обслуживания ( сказал образно). В справочнике Подключаемого оборудования "Драйвер не установлен". Хоть и слетел терминал, ветка в реестре существует. И путь в параметре указан не верный. Указан путь временной папки пользователя ExtCompT - причем путь пользователя первой кассы. И есть еще очень интересный параметр ThreadingModel со значение both. Путь переделал на C:WindowsSysWOW64sbrfcom.dll . А как разрегистрировать старые dll в реестре?
#33 by pers200590
кто может еще добавить???
#34 by Андрюха
разрегистрировать можно regsvr32.exe -u Имярек.dll
#35 by Spacer1966
Параметр ThreadingModel должен быть. Это нормально. То что указан неверный путь означает что была попытка перерегистрации драйвера из 1С при подключении его из макета справочника "ПодключаемоеОборудование". Есть еще конечно вариант что винда каким то образом восстановила старый вариант этой ветки реестра, но это маловероятно. Так что нужно смотреть код в 1С. Искать место откуда был вызван метод ПодключитьВнешнююКомпоненту или УстановитьВнешнююКомпоненту с параметром указывающим путь к макету содержащему драйвер. А что это за обработка "Свертка итогов"? Она не типовая? Может это в ней содержится код который сбивает регистрацию драйвера?
#36 by Spacer1966
В принципе, чисто теоретически, то что указан путь пользователя первой кассы не так уж и страшно. По идее все должно работать даже при таком варианте при условии что: 1. В папке ExtCompT пользователя первой кассы имеются все три dll-ки; 2. У пользователя второй кассы есть права на чтение каталога ExtCompT пользователя первой кассы.
#37 by pers200590
Это конфигурация УТ 11.0.8.11 В ней целый функционал по эквайринговым системам. Сегодня в Windows server 2008 r2 x64 убрал параметр контроля учетных записей. Убрал все записи в реестре . Зарегистрировал dll только в C:WindowsSysWOW64sbrfcom.dll. В итоге не взлетело . Зарегистрировал все dll  в ExtCompT и все заработало. Но опять все слетело в обед и потом вечером. В журнале событий никаких собыйти, ошибок и предупреждений нет касающихся терминала иили что-то подобное
#38 by pers200590
Единственно я думаю может дать права на папку System32 и SysWOW64 этим пользователям, которые работают с терминалом.
#39 by pers200590
Есть ПодключитьВнешнююКомпоненту есть, в функции ПолучитьОбъектДрайвера(ДрайверУстройства) Экспорт. Больше ничего такого про макеты я не нашел.
#40 by pers200590
#41 by Spacer1966
Ну, прав на папки System32 и SysWOW64 у пользователей терминала итак по идее достаточно. У них урезаны права на запись в реестр. На ПодключитьВнешнююКомпоненту("AddIn.SBRFCOMObject"); И посмотрите что получится.
#42 by pers200590
Большое спасибо. Код заменил.Попробовал сделать продажу, продажа прошла, но маленькая проблемка магазин закрылся и работу двух терминалов. можно проверить только завтра в течение рабочего дня.
#43 by pers200590
Очень странная ситуация получается правда?
#44 by pers200590
В Процедура УстановитьДрайверИзДистрибутива(ИмяМакета, ИмяФайла) - может там какой-либо подвох???
#45 by Spacer1966
Это зависит от того что находится внутри zip-архива в макете. Если там находится dll, то она будет регистрироваться во временном каталоге пользователя, и тогда подвох возможен. Но иногда в макете находится не dll, а типичная программа установки (setup) для установки драйверов. В этом случае dll драйвера будут установлены и зарегистрированы там где это предусмотрено программой установки.
#46 by Spacer1966
Вообще немного не так сказал. Если внутри zip-архива в макете находится dll, то вызываются методы ПодключитьВнешнююКомпоненту или УстановитьВнешнююКомпоненту. Процедура УстановитьДрайверИзДистрибутива(ИмяМакета, ИмяФайла) вызывается только в том случае если внутри zip-архива в макете находится программа установки (setup).
#47 by pers200590
Теперь происходят вообще странные моменты. При оплате платежной картой через документ ЧекККМ, при нажатии на кнопку "Расчет", выходит окно UPOS в котором пишется "Пин-пад не подключен" и справа окно "проверьте подключение. ошибка 4309". В справочнике "Подключаемое оборудование" в разделе Экварийнговый терминал Драйвер установлен. Приходиться опять же регистрировать dll  и все прекрансо дальше работает.
#48 by pers200590
Скорей всего я уже всех замучил, особенно Spacer1966. Но вот такая проблема . Не знаю уже что делать
#49 by Spacer1966
Тут уже что-то с самим эквайринговым терминалом. Нашел навскидку в инете на форуме два обсуждения на аналогичную тему: Может служба техподдержки сбербанка чем-то поможет?
#50 by pers200590
ну а почему выход из это ситуации лежит в перерегистрации dll опять же
#51 by pers200590
Во общем пообщался я с сотрудниками филиала нашего Сбербанка. Они вообще не в курсе такой проблемы(сложилось впечатление что они вообще ничего не знают). Говорят что это проблема фирмы 1С, что dll sbrfcom рассчитана для работы одного терминала. Для того чтобы настроить работу двух терминалов необходимо  зарегистрировать dll в двух местах и в 1с указать что для 1 терминала - 1 длл, для 2 терминала - 2 длл. Типа стандартная конфигурация длл рассчитана для работы с один терминалом. И как им доказать что они не правы.
#52 by Spacer1966
Регистрация одной и той же dll в разных местах в принципе невозможна. Каждая dll имеет свой уникальный CLSID. Например для sbrfcom.dll это {B36F6A41-5BB1-4B59-9797-BE55B61C9959}. Поэтому если даже скопировать sbrfcom.dll в разные каталоги и по очереди зарегистрировать ее в них, то в системном реестре останется информация только о последней регистрации. Странные консультанты в техподдержке Сбербанка если они этого не знают. Проблема скорее действительно в том что dll sbrfcom рассчитана для работы одного терминала. Параметры настройки этой компоненты довольно скудные, их вообще почти нет. Настраивается лишь ширина слип-чека и код символа частичного отреза. Если же посмотреть настройки "ИНПАС:Эквайринговые терминалы", то там куда больше параметров настройки.
#53 by Serginio1
Вообще то можно загружать без регистрации как это делает сама система. Для этого нужны гуид библиотеки, а для получения класса подойдет и Guid IDispatch var       DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall;
#54 by pers200590
Объясни что у тебя написано в ?
#55 by Serginio1
Ты можешь использовать несколько COM библиотек, только запуск нужно делать не через Новый ComObject а создав функцию загрузки как в 53 передавая путь к библиотеке и GUID библиотеки
#56 by pers200590
нефига себе я даже с этим и не сталкивался
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С