|
COMОбъект: -2147221005(0x800401F3): Недопустимая строка с указанием класса | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
12.11.20
✎
15:11
|
Перестало работать OLE-соединение "V83.Application": Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса. Тема заезженная, везде предлагают выполнить перерегистрацию платформы. Стоит 8.3.10.2466 х64, но клиентская часть 32-разрядная, делаю (под админом): regsvr32 "c:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll" (или надо regsvr32 "c:\Program Files (x86)\1cv8\8.3.10.2466\bin\comcntr.dll"?). Дальше надо сервер перезагрузить, или необязательно?
Читал статьи Ошибка V82.COMConnector на сервере 64. Решение проблемы (http://catalog.mista.ru/1c/articles/197627/) и Решение проблемы «Недопустимая строка с указанием класса (https://efsaver.ru/docs/reshenie-problemy-nedopustimaya-stroka-s-ukazaniem-klassa.html), кое-что изменил/добавил в приложение COM+ V8COMConnector. Чтобы изменения вступили в силу, как перезапустить? |
|||
1
Mikhail Volkov
12.11.20
✎
15:36
|
Службы компонентов/Действие/Пуск?
|
|||
2
Kigo_Kigo
12.11.20
✎
15:40
|
не помню что конкретно сделал, но статья с инфостарта не помогла, по моему привел разрядность к одному знаменателю
|
|||
3
Kigo_Kigo
12.11.20
✎
15:41
|
сижу уже с начала создания темы вспоминаю как эту бяку победил, хоть убей не помню, помню точно что по статье делал, не вылечилось и сервант ребутил и клиента
|
|||
4
ДенисЧ
12.11.20
✎
15:42
|
Взять regsvr32 не из system, а из SysWOW ?
|
|||
5
Mikhail Volkov
12.11.20
✎
15:50
|
Не помогло... Службу Агент сервера 1С:Предприятия 8.3 (x86-64) перезапустить, выкинет пользователей?
(1) У Альфа-Авто должна быть 32-разрядная клиентская часть, иначе торговое оборудование не работает. (4) Полностью C:\Windows\SysWOW64\regsvr32 "c:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll"? Не Program Files (x86)? |
|||
6
ДенисЧ
12.11.20
✎
15:52
|
(5) Если SysWOW, то (x86)
И наоборот |
|||
7
Kigo_Kigo
12.11.20
✎
15:52
|
(5) как ты пытаешься вызвать х64 ком объект с х32 разрядного клиента? ответ, никак, регистрируй на клиенте х32 компненту
|
|||
8
Mikhail Volkov
12.11.20
✎
15:53
|
(4) Чтоб в силу вступило, что сделать?
|
|||
9
Kigo_Kigo
12.11.20
✎
15:55
|
(8) Ничего, так должно все работать, у тебя из сабжа не создается ком объект, потому что он ее не видит, а точнее видит другой разрядности, это не проблема подключений к базе через ком(сервер х64,х32, не важно), это проблема создания объекта как такого
|
|||
10
Kassern
12.11.20
✎
15:56
|
(0) делай обертку через службы компонентов для библиотеки comcntr.dll
|
|||
11
Mikhail Volkov
12.11.20
✎
16:09
|
(9) Дык, как правильно ее регистрировать?
(10) Вроде все сделано. Описание: 1CV83 COM Connector Class, DLL: C:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll |
|||
12
Kigo_Kigo
12.11.20
✎
16:22
|
(11) а у тебя точно регистрация проходит?
|
|||
13
Kigo_Kigo
12.11.20
✎
16:24
|
И так, делает reg.bat файл , вставляем туда строку
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.15.1830\bin\comcntr.dll" pause сохраняем, запускаем от имени администратора, пробуй, скрин о регистрации сюда |
|||
14
Kigo_Kigo
12.11.20
✎
16:25
|
(13) Пути поменять на свои, лучше полные
|
|||
15
Kigo_Kigo
12.11.20
✎
16:26
|
для х32 путь в C:\Program Files (x86)\
|
|||
16
arsik
гуру
12.11.20
✎
16:31
|
(0) Попробуй через Портативные инструменты разработчика http://devtool1c.ucoz.ru/load/osnovnye/portativnye_instrumenty_razrabotchika_dlja_1s_8_2/1-1-0-6
Там есть такой удобный инструмент, я через него всегда регистрирую, в непонятных ситуациях. http://devtool1c.ucoz.ru/index/upravlenie_com_klassami_1s/0-56 |
|||
17
Mikhail Volkov
12.11.20
✎
16:55
|
(13) Успешное выполнение: https://ibb.co/z5h2fHc. Ошибка осталась. 1С надо перезапускать?
(16) Что им должен увидеть? Вроде дело не в регистрации, в чем-то другом... Может служба какая-то отвалилась... Какая? Работало же раньше... |
|||
18
Kigo_Kigo
12.11.20
✎
17:01
|
1С конечно надо перезапустить
|
|||
19
Mikhail Volkov
12.11.20
✎
17:03
|
(18) Не помогло.
|
|||
20
ZDenis
12.11.20
✎
17:51
|
(19) У тебя com соединение на сервере ведь создается, причем тут клиентская часть. Вот на сервере и регистрируй dll. Причем, если сервер 64х, то и dll нужно соответствующую. Сперва лучше отмени уже сделанную регистрацию, чтобы в реестре путаницы не было.
|
|||
21
Мимохожий Однако
12.11.20
✎
17:59
|
В БСП и типовых конфигурациях есть функция ЗарегистрироватьCOMСоединитель()
|
|||
22
TormozIT
гуру
12.11.20
✎
18:14
|
О да тут похоже все не понимают, что COMСоединитель и OLEAutomation (V8*.Application) - разные вещи и имеют существенные отличия в отношении контроля совместимости версий платформы и способа регистрации.
Кто хочет прокачать теорию, читайте тут все разжевано http://catalog.mista.ru/1c/articles/387577/ Кому нужно решение, в (16) уже дали ссылки - там все сделано очень универсально (как и весь ИР). Картинка на странице описания правда старовата уже. Запускать эту приблуду надо на том компьютере, где будет создаваться COM-объект (COM-клиент). |
|||
23
Mikhail Volkov
12.11.20
✎
19:49
|
(20) (22) Уже всяко пробовал, в том числе с ключом /u (с отменой регистрации). Другой вариант: переустановить платформу, при этом она зарегистрирует все компоненты заново. Но это крайний вариант. Вроде дело не в регистрации...
Службы компонентов как перезапустить? Хотя сервер перезагрузил (все вышли), не помогло!? |
|||
24
Mikhail Volkov
12.11.20
✎
22:16
|
Где, в какой ветке реестра Windows прописывается регистрация платформы?
|
|||
25
TormozIT
гуру
12.11.20
✎
22:43
|
(23) Если ты пробовал все, что я рекомендовал, то покажи скриншот с COM классами в ИР.
|
|||
26
Mikhail Volkov
13.11.20
✎
05:33
|
(25) Как это сделать? Это с помощью инструментов (16)? У меня их нет.
|
|||
27
TormozIT
гуру
13.11.20
✎
07:54
|
(26) Почему у тебя их нет? Что ты делал, чтобы они у тебя появились?
|
|||
28
Mikhail Volkov
13.11.20
✎
08:09
|
(27) Управление COM классами 1С
Просмотр и регистрация COM классов платформы 1С. Все разрядности Все типы классов Все издания платформы Генерация конфигурационного файла разрешения отладки COM-соединения Можно указать для каждого класса нужную версию платформы из списка установленных Пожалуй стоит поставить... А "Регистрация утилиты администрирования серверов (8.3.10.2466)" - то, нет? Объект: "C:\Program Files (x86)\1cv8\8.3.10.2466\bin\RegMSC.cmd" выполнил: C:\Program Files (x86)\1cv8\8.3.10.2466\bin>regsvr32 /n /i:user radmin.dll - Успешное выполнение DllInstall в radmin.dll, но ошибка осталась. |
|||
29
TormozIT
гуру
13.11.20
✎
08:14
|
(28) Поздравляю. Ты сделал первый шаг в правильном направлении - осознал, что "стоит поставить". Представляй, что я крепко держу тебя за руку, и потому делай уверенно следующий шаг.
|
|||
30
XLife
13.11.20
✎
08:15
|
"C:\Program Files (x86)\1cv8\8.3.10.2466\bin\1cv8.exe" /regserver
|
|||
31
Mikhail Volkov
13.11.20
✎
08:21
|
(29) Не понял, что скачивать: ИНСТРУМЕНТЫ РАЗРАБОТЧИКА ПОРТАТИВНЫЕ 1С 8.2+ V5.67P или 1С 8.3 V5.67E (1С 8.2 смущает)?
(30) В командной строке (под админом)? |
|||
32
XLife
13.11.20
✎
08:24
|
(31) да... а потом на всякий случай: regsvr32 "C:\Program Files (x86)\1cv8\8.3.10.2466\bin\comcntr.dll"
|
|||
33
Мимохожий Однако
13.11.20
✎
08:27
|
(31) не смущайся. Скачивай
|
|||
34
TormozIT
гуру
13.11.20
✎
08:31
|
(31) Там не 8.2, а 8.2+. Качай портативные
|
|||
35
Mikhail Volkov
13.11.20
✎
08:33
|
(32) Сообщений не выдало, процесс OLE-соединения вроде пошел... сразу ошибку (0) не выкинула. О, Подключение выполнено к базе: 'Srvr="ANDROMEDA";Ref="PATRCA";' 13.11.2020 10:27:23 - успех! Посмотрю как в рабочей базе...
|
|||
36
TormozIT
гуру
13.11.20
✎
08:44
|
(35) Только это не из-за (32), а из-за (30). Ну хоть кто то здесь знает разницу из (22).
|
|||
37
Mikhail Volkov
13.11.20
✎
11:29
|
Все же, в какой ветке реестра Windows прописывается регистрация платформы?
(36) Статью в (22) читал, но по другому поводу: Альфа-Авто обычно ведет Com-обмены с УПП/КА1. Когда поддержка КА1 кончилась, создали базу ERP/КА2, но она потребовала более высокую версию платформы. С OLE-обменом возникли проблемы: https://i.ibb.co/pdrH9Wy/COM.jpg. Меняю версию зарегистрированной платформы, тогда нормально. Даже функции написал: // Определяет версию подключаемого приложения, при не соответствии требуемой переключает ее для OLE // для пользователей с административными правами Функция ВерсияПодключаемогоПриложения(СтрокаПодключения) Экспорт СисИнфо = Новый СистемнаяИнформация; ТекущаяВерсия = СисИнфо.ВерсияПриложения; Если Найти(ТекущаяВерсия, "8.3") = 0 Тогда Возврат ТекущаяВерсия; КонецЕсли; ТребуемаяВерсия = ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ВысокаяВерсия, ПрежняяВерсия); х86 = Не ПодключенаВысокаяВерсия(СтрокаПодключения); WshShell = Новый COMОбъект("WScript.Shell"); Ключ = ""; Значение = ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ); // Перключение версии OLE // Если Не ПустаяСтрока(Значение) И Найти(Значение, ТребуемаяВерсия) = 0 Тогда // ТекущаяВерсия <> ТребуемаяВерсия // Значение = СтрЗаменить(Значение, "Program Files" + ?(х86, "", " (x86)"), "Program Files" + ?(х86, " (x86)", "")); // Значение = СтрЗаменить(Значение, ТекущаяВерсия, ТребуемаяВерсия); // WshShell.RegWrite(Ключ, Значение); // ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",, Истина); // Сообщить("Переключили версию платформы на " + ТребуемаяВерсия, СтатусСообщения.Информация); // КонецЕсли; Возврат ?(ПустаяСтрока(Значение), ТекущаяВерсия, ТребуемаяВерсия); КонецФункции // ВерсияПодключаемогоПриложения() // Переключает на старую версию платформы для OLE-соединения, если она переключена на новую версию // для пользователей с административными правами Процедура ЗвершитьПодключениеOLE() Экспорт WshShell = Новый COMОбъект("WScript.Shell"); Ключ = ""; Значение = ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ); Если ПустаяСтрока(Значение) Или Найти(Значение, "Program Files (x86)\1cv8\" + ПрежняяВерсия) > 0 Тогда Возврат; КонецЕсли; WshShell.RegWrite(Ключ, "C:\Program Files (x86)\1cv8\" + ПрежняяВерсия + "\bin\1cv8.exe"); ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",, Истина); КонецПроцедуры // ЗвершитьПодключениеOLE() Функция ЗначениеКлючаЗарегистрированнойВерсииV83Application(WshShell, Ключ) Экспорт // значение HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e92b75e3-2ea1-4fec-b493-cef3ec59fca6}\LocalServer32 должно быть C:\Program Files\1cv8\8.3.14.1779\bin\1cv8.exe CLSID = "{E92B75E3-2EA1-4FEC-B493-CEF3EC59FCA6}"; Ключ = "HKEY_CLASSES_ROOT\Wow6432Node\CLSID\" + CLSID + "\LocalServer32\"; Значение = ""; Попытка Значение = WshShell.RegRead(Ключ); Исключение Сообщить("Произошла исключительная ситуация (WshShell.RegRead): Неверная ссылка на корень в разделе реестра " + Ключ + " - недостаточно прав на реестр Windows", СтатусСообщения.Внимание); КонецПопытки; Возврат Значение; КонецФункции // ЗначениеКлючаЗарегистрированнойВерсииV83Application() Но это только для пользователей с административными правами, пришлось от них отказаться. А метод COM (не OLE) нормально работает. Нашел на http://catalog.mista.ru/public/1042208/ метод открытия объекта по ссылке в другой базе (подобно OLE), написал: // Открытие объекта по ссылке в базе ERP/КА2, работающей на более высокой версии платформы // Процедура ОткрытьОбъектВБазеВысокойВерсии(Ссылка) Экспорт Если обЗначениеНеЗаполнено(Ссылка) Тогда Предупреждение("Объект в " + БазаОрганизации(ОрганизацияТекущегоПодключенияКА()) + "не найден!", 60); Возврат; КонецЕсли; ИмяСервера = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), 7, Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 8); // "andromeda:1641"; ИмяБазы = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(ОбъектКА.СтрокаСоединенияИнформационнойБазы()) - Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7); // "PatrERP"; Если Не БазаКАОткрытаПользователем() Тогда Предупреждение("База '" + ИмяБазы + "' не открыта под пользователем '" + СокрЛП(ПараметрыСеанса.Пользователь) + "'", 60); Возврат; КонецЕсли; Объект = Ссылка.ПолучитьОбъект(); ТипОбъекта = СокрЛП(Объект.Метаданные().ПолноеИмя()); GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); НавигационныйGUID = Сред(GUID, 20 ,4) + Сред(GUID, 25, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Сред(GUID, 1, 8); ПутьОбъекта = "e1cib/data/" + ТипОбъекта + "?ref=" + НавигационныйGUID; НазваниеОкна = СокрЛП(ОбъектКА.Константы.ЗаголовокСистемы.Получить()); // "КА2 ИП Патрушева Г.М."; НазваниеОкна = СтрЗаменить(НазваниеОкна, """", """"""); НазваниеОкна = СтрЗаменить(НазваниеОкна, " ", """ """); СерверБаза = ИмяСервера + "\" + ИмяБазы; СерверБаза = "/S""" """" + СерверБаза + """" """/URL""" """" + ПутьОбъекта; // после СерверБаза? " /N""Администратор"" /P""2001221" ПутьКФайлу = "\\corp.akit\workspace$\1c\1с_Архивы\"; ПолныйПутьКФайлу = ПутьКФайлу + "ОткрытьСсылкуВДругойБазе.exe"; ПолныйПутьОткрытияОбъекта = """"""; // вроде не нужно СтрЗаменить("c:\Program Files\1cv8\common\1cestart.exe ENTERPRISE " + СерверБаза," ",""" """); Файл = Новый Файл(ПолныйПутьКФайлу); Если Не Файл.Существует() Тогда Сообщить("Файл: '" + ПолныйПутьКФайлу + "' не существует.", СтатусСообщения.Информация); Возврат; КонецЕсли; Приложение = ПолныйПутьКФайлу + " " + НазваниеОкна + " " + ПутьОбъекта + " " + СерверБаза + " " + ПолныйПутьОткрытияОбъекта; // Сообщить(Приложение, СтатусСообщения.Информация); ЗапуститьПриложение(Приложение); КонецПроцедуры // ОткрытьОбъектВБазеВысокойВерсии() |
|||
38
acht
13.11.20
✎
11:40
|
(37) > ПолныйПутьКФайлу = ПутьКФайлу + "ОткрытьСсылкуВДругойБазе.exe";
/URL <адрес> — указывает необходимость перехода по ссылке. Поддерживаются ссылки формата e1c: Если указана внешняя ссылка - выполняется поиск запущенного клиентского приложения с той же строкой соединения, которая указана в параметре. В найденном клиентском приложении не должно быть открыто модальное или блокирующее окно. После этого выполняется попытка перехода по локальной ссылке из исходной навигационной ссылки и активизируется основное окно приложения. В случае неудачи клиентское приложение продолжает работу. Если исходная навигационная ссылка не содержит локальной ссылки (содержит только адрес информационной базы), то попытка перехода не выполняется, активируется основное окно найденного клиентского приложения. Если подходящего клиентского приложения не найдено, строка соединения определяется из параметра командной строки /URL. Если указана локальная ссылка - клиентское приложение запускается в общем порядке. После запуска выполнится попытка перехода по переданной локальной ссылке. Для ссылок формата http(s) всегда запускается (или находится активный) тонкий клиент. © ООО "1С-Софт", 1996-2019. Все права защищены. |
|||
39
Mikhail Volkov
13.11.20
✎
11:55
|
(38) Что-то не понял к чему это, о чем?
|
|||
40
Mikhail Volkov
13.11.20
✎
12:42
|
Не сразу заметил эту (0) ошибку, потому что в ЖР в отборе на вкладке Данные отмечаю лишь объекты заслуживающие внимание (например, по кассе). Тогда ошибки по другим объектам не видны. Можно как-то настроить отбор, чтобы события с ошибками все отображались. А события Информация - только отмеченные на вкладке Данные?
|
|||
41
acht
13.11.20
✎
13:13
|
(39) ОткрытьСсылкуВДругойБазе.exe не нужен
|
|||
42
Mikhail Volkov
13.11.20
✎
13:55
|
(41) Это как, почему? Не по теме, пиши в Открыть объект по найденной ссылке в другой базе
|
|||
43
Mikhail Volkov
13.11.20
✎
17:33
|
На счет ЖР (40), смотреть либо ошибки, либо отмеченные объекты? Вместе никак?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |