Некоторые картинки не загружаются из РФ и РК, используйте VPN.

суббота, 12 ноября 2022 г.

1СОшибка -2147221164(0x80040154): Класс не зарегистрирован

 Частая ошибка, решаемая банальной регистрацией comcntr.dll, но оказывается есть частные случаи, именно с таким я и столкнулся. Имеется сервер 2019, разработчик под учеткой с правами обычного пользователя получил такую ошибку. Что было предпринято:

  1. первое решение
    1. регистрация библиотеки требуемой версии платформы
  2. второе решение
    1. удалена регистрация библиотек других платформ (regsvr32.exe -u)
    2. зарегистрирована еще раз нужная
  3. третье решение
    1. удалены все платформы
    2. установлена требуемая по новой
    3. зарегистрирована библиотека
    4. перезагружен сервер
Все равно результата нет. Так как в какой-то момент разработчик спросил:

- От администратора выполняли регистрацию?
- А иначе нельзя! - хотел было сообщить я

да и проверка занимает более необходимого (от 5 минут до суток), я засомневался в необходимости продолжения этой пытки и исключил из цепочки разработчика

- В какой базе и при каких условиях возникает ошибка?
- База там то, а там то нужно нажать кнопку
- Ок

Открыл под своей учеткой, нажал кнопку и все работает. Дабы не прослыть дураком, открыл под тем пользователем и получил таки ту же ошибку. Так, оказывается ошибка возникает только в контексте пользователя.
Вот теперь есть с чем работать. Вспоминаю что у меня настроена политика ограниченного использования программ (SRP), захожу туда, там стоит только два ограничения - запуск из директорий %Userproffile%\Downloads\*\* и %Temp%\*\* (с разрешением определенных пакетов). Да и в основных настройках SRP (Software Restriction Policies) указано нацеливание только на исполняемые файлы, dll в счет не идут
  1. четвертое решение
    1. проверить SRP
    2. удалить SRP
    3. gpupdate /force
    4. выгнать пользователя и зайти по новой
Хрен, проблема остается, тут на инфостарте натыкаюсь на одну заметку, где упоминается SRP:
  1. пятое решение
    1. Администрирование - Службы компонентов – Компьютеры – Мой компьютер – Приложения COM+ - Создать приложение – Создать новое приложение – вводим имя "V83COMConnector" (переключатель "Серверное приложение") – Указанный пользователь (Администратор*)
    2. В "V83COMConnector" – Компоненты – создать новый компонент – Установка новых компонентов - %каталог 1С%\bin\comcntr.dll *
    3. Правой кнопкой по ветке "V83COMConnector" – Свойства – Безопасность – снимаем "Принудительная проверка доступа для приложений" - ставим "Применить политику программных ограничений" - Уровень ограничений "Неограниченный"
    4. Включаем SRP, а заодно и AppLocker (позволяет запретить группе пользователей cmd.exe, mmc.exe, taskmgr.exe)
    5. Перезаходим и проверяем
Собственно вот и решение - установить COM приложение. Есть только пара моментов (помечены звездочкой):
  1. БИБЛИОТЕКА ДОЛЖНА БЫТЬ ЗАРЕГИСТРИРОВАНА
  2. Администратор - пользователь с админскими правами, если пароль сменит, то могут быть проблемы (как у служб или планировщика заданий)
  3. Администратор должен иметь полные права на файлы и каталоги баз 1С
  4. На каждую платформу придется создавать новое приложение
  5. На сервере RDP под учетками других пользователей выскакивала ошибка "метод объекта не обнаружен (connect)", решилась установкой на вкладке удостоверение, свойств коннектора, - "Локальная служба - встроенная учетная запись службы"
  6. Пункт 3 в моем случае привел к ошибке разделенного доступа к БД, даже указание кредов админа не помогло, но перевод режима активации (вкладка свойств коннектора) из серверного приложения в библиотечное - помогло.
UP 07/07/2023


Сегодня столкнулся с ошибкой "Точка входа в процедуру не найдена в библиотеке C:\Program Files\1cv8\8.3.18.1957\bin\comcntr.dll". Это как раз к вопросу о необходимости пересоздания приложения. После попытки обновить компонент, вылез сабж у пользователя не администраторского уровня.
Проход по пунктам выше показал, что половина пунктов блокирует предыдущие, в итоге текущий конфиг V83COMConnector (64 разрядная платформа) с включенным SPR без AppLocker:
  1.  Общие
    1. Имя - V83COMConnector
  2. Безопасность
    1. Авторизация - выключена "Принудительная проверка доступа для приложения"
    2. Уровень доступа - "проверка доступа на уровне процесса и на уровне компонента"
    3. Политика программных ограничений - уровень ограничений - неограниченный
  3. Удостоверение
    1. Учетная запись - Указанный пользователь
  4. Активация
    1. Серверное приложение
Остальные параметры по умолчанию:


Плюс добавить компонент.

UP 30/10/2023

Без приключений почему-то оно не работает. В этот раз пришлось удалить все старые платформы. Удалить регистрацию библиотеки (regsvr32 /u), зарегистрировать по новой, добавить приложение и компонент заново.

UP 07/04/2024

Решил все таки использовать отдельную учетную запись именно для данной задачи. Понадобилось из-за того, что я на своей учетке меняю пароль и каждый раз забываю обновить его здесь и в других местах. Создал учетку V83COMConnector с правами админа и указал на вкладке удостоверение. И в этот раз все взлетело.
Сегодня обновлял базы, вылезла очень неприятная ошибка:
запрещенная комбинация текущей области и указанного поколения

Пришлось обновить платформу, а значит и com объект тоже надо обновить. Решил попробовать без пересоздания

До обновления

Пробуем поверх накатить новую библиотеку

Действия такие же

находим новую библиотеку
Выбираем ее и завершаем создание

Проверяем
Вроде все ок. Запускаем 1С под пользователем без прав администратора и проверяем (у меня это обработка с прямым подключением к базе).



Ошибка

Но, какая ошибка!?

-2147467238(0x8000401A): Процесс сервера не может быть запущен, так как указана неправильная идентификация. Проверьте правильность указания имени пользователя и пароля. 

 На вкладке удостоверение обновляем учетные данные (почему то они слетают)

И все, в этот раз я еще и лишил прав админа указанного пользователя!

Не забываем!!!


UP 07/04/2024

После перезагрузки ошибка сохраняется, помогает обновление учетных данных на вкладке Удостоверение. Раньше я всегда после загрузки заходил на сервер, соответственно такой проблемы не видел.
Вернул пользователю права администратора, проблема сохранилась
В журнале такая ошибка:
Не удалось запустить DCOM-сервер: {181E893D-73A4-4722-B61D-D604B3D67D47} как TRM02/V83COMConnector.Ошибка:
"0"
Произошла при запуске команды:
C:\Windows\system32\dllhost.exe /Processid:{C55DD657-0E4E-4AF2-A18D-B057A2D725A2}

И

Произошла ошибка DCOM "1385"; не удалось войти в TRM02\V83COMConnector для запуска сервера:

{C55DD657-0E4E-4AF2-A18D-B057A2D725A2}

При этом в журнале безопасности очень интересная запись:

Учетной записи не удалось выполнить вход в систему.

Субъект:

ИД безопасности: DOMEN\aa
Имя учетной записи: aa
Домен учетной записи: DOMEN
Код входа: 0xFBF40

Тип входа: 2

Учетная запись, которой не удалось выполнить вход:
ИД безопасности: NULL SID
Имя учетной записи: V83COMConnector
Домен учетной записи: DOMEN

Сведения об ошибке:
Причина ошибки: Неизвестное имя пользователя или неверный пароль.
Состояние: 0xC000006D
Подсостояние: 0xC0000064

Сведения о процессе:
Идентификатор процесса вызывающей стороны: 0x3228
Имя процесса вызывающей стороны: C:\Windows\System32\svchost.exe

Сведения о сети:
Имя рабочей станции: TRM02
Сетевой адрес источника: ::1
Порт источника: 0

Сведения о проверке подлинности:
Процесс входа: seclogo
Пакет проверки подлинности: Negotiate
Промежуточные службы: -
Имя пакета (только NTLM): -
Длина ключа: 0

 V83COMConnector - локальная учетная запись, а не доменная!

Хотя в следующих записях есть и такое:

Учетной записи не удалось выполнить вход в систему.
Субъект:
ИД безопасности: СИСТЕМА
Имя учетной записи: TRM02$
Домен учетной записи: DOMEN
Код входа: 0x3E7

Тип входа: 4

Учетная запись, которой не удалось выполнить вход:
ИД безопасности: NULL SID
Имя учетной записи: V83COMConnector
Домен учетной записи: TRM02

Сведения об ошибке:
Причина ошибки: Выбранный режим входа для данного пользователя на этом компьютере не предусмотрен.
Состояние: 0xC000015B
Подсостояние: 0x0

Сведения о процессе:
Идентификатор процесса вызывающей стороны: 0x418
Имя процесса вызывающей стороны: C:\Windows\System32\svchost.exe

Сведения о сети:
Имя рабочей станции: TRM02
Сетевой адрес источника: -
Порт источника: -

Сведения о проверке подлинности:
Процесс входа: Advapi  
Пакет проверки подлинности: Negotiate
Промежуточные службы: -
Имя пакета (только NTLM): -
Длина ключа: 0

Вход в качестве пакетного задания для данной учетки включен. Гугл говорит что то совсем невразумительное. Уж думал делать доменную учетку для этой задачи!
Пока копался в настройках групповых политик, стукнуло мне в голову разрешить данной учетке вход в качестве службы в локальных политиках (secpol.msc).

И, надо же, заработало!

Лишил пользователя прав администратора, перезагрузил сервер и все запустилось без ошибок....

Перезагрузил еще раз и вылезла ошибка, на текущий момент права такие:


Из пакетного задания вылетел вместе с лишением админских прав

Тогда я решил, что надо его как-то туда добавить, но так, чтобы прав админа у него не было...

Проблема в том, что данный пункт определен групповой политикой, локально не редактируется. А пользователь локальный и я попробовал его добавить в политику с указанием домена trm02\V83COMConnector, она добавилась. Политику можно изначально ограничить только указанным сервером.

Проверил в 1С, все работает.

На данном этапе считаю задачу закрытой, сервер устал перезагружаться 

Отметка на всякий случай, в свойствах компьютера в оснастке Службы компонентов настроено вот так:


Может оно и не работает, но я чет уже устал перезагружать комп и воспользуюсь вариантом: работает - не трогай.

Комментариев нет:

Отправить комментарий