Ошибка при вызове конструктора сомобъект 2147024891 0x80070005 отказано в доступе

Обновлено: 11.05.2024

Здравствуйте. Подскажите, никто не сталкивался с такой проблемой?
Если запускать этот код из внешней обработки , то всё нормально, но как только я разместил код в общий модуль (сервер, привилегированный, вызов сервера) и подцепил рег. задание, то вылетает ошибка:

Может в настройках модуля что-то убрать?

(3) yurowski, у тебя 1С:Сервер запускается под конкретным пользователем - вот ему дать права, а не только, как по-умолчанию, "Разрешить запуск как службs"

Чтобы была возможность НА СЕРВЕРЕ обращаться к Excel через COM надо дать права доступа пользователю, от которого запускается сервер 1С. Если мы говорим про регламентные задания, то "перетащить на клиента" не вариант. Есть вариант - использовать умение платформы 8.3.6(7?) читать книги Excel в табличный документ без использования Excel - ТабличныйДокумент.Прочитать()
Там есть нюансы:
1. все листы склеиваются в один табличный документ через разделитель страниц. Вот тут находили решение по обратному разделению на страницы. К сожалению, имена страниц теряются.
2. Могут быть проблемы со считыванием значений как значения (например, дата). По умолчанию считываются текстовые представления. Можно указать параметр для чтения значений а не текста, но с первой попытки у меня что-то не срослось, и больше я не пробовал.
3. Цветовое оформление может быть считано не совсем точно.
Даже с такими ограничениями в одном проекте мне удалось успешно отказаться от обращения к Excel.

Теперь про права, если всё-таки без обращения через COM не обойтись.
Потребуется зайти в "Службы компонентов" (Панель управления-Администрирование, или comexp.msc, или dcomcnfg.exe) - Настройка DCOM, и найти там Microsoft Excel Application.
Если его там нет - значит у вас 64-разрядная система и установлен 32-разрядный Excel. Решение - запустить "comexp.msc /32" для управления 32-разрядными COM-серверами.
Что тут нужно:
1. установить явно от имени какого пользователя будет запускаться Excel (вкладка "Удостоверение").
2. На вкладке "Безопасность" пользователя, от которого стартует 1С (обычно USR1CV8), явно прописать в списках на запуск и доступ.

Maspi; Egovigor; klaus38; etri; vlast; N191119; rolin555; Ghost_X; onetone; tiniji; Tangram; mythos; natarezn; + 13 – Ответить



Значит дело было так. Появилась необходимость подключаться к базам по com соединению, для анализа тамошних объектов метаданных. Проблема оказалась в том, что базы могли работать на разных версиях 1С. Пошел в интернет, искал, читал, но все фигня, в оновном все предлагают держать базы на одной версии, что для меня было невозможным.

Кроме, вот этой статьи. Огромное спасибо автору (Леонид Кириенко) и zakiap

Тут уже интересней, но есть пару минусов

1) 1С должна работать от имени учетки с админскими правами.

2) "Варварское" поведение по отношению dllhost.exe :)

3) Могут возникнуть проблемы при одновременном обращении к базам на разных версиях.

Но, как оказалось, самым для меня полезным, оказалась не сама статья, а один из комментариев к ней.


Если присмотрется, то видно, что у него создано несколько оберток для разных версий. Увидев этот коммент, я тут же обрадовался, думал сейчас все расскажут. Но не тут то было, показать, показал, а рассказать забыл)

Инструкция

1. Идем "Панель управления" - "Администрирование" - "Службы компонентов"

2. В оснастке служб компонентов, "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+"

3. Создаем новое приложение, правой кнопкой по "Приложения COM+" - "Создать" - "Приложение"

4. Выбираем "Создать новое приложение", называем например "1cv8", тип выбираем "Библиотечное приложение"

должно полчуить так


5. Раскрываем "1cv8", правой кнопкой по "Компоненты" - "Создать" - "Компонент".

6. Выбираем вариант "Установка новых компонентов", находим нашу библиотеку comcntr.dll

Находится она в катлоге BIN установленной платформы, у меня например путь такой

"C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll"

должны получить следующую картину


7. Правой кнопкой по "V83.COMConnector.1" - "Псевдоним. ", меняем наименование с "CopyOf.V83.COMConnector.1" на "V83.COMConnector_8.3.9.2033". Данное действие проделываем для всех нужных версий платформ.

8. Открываем "regedit" через пуск или команду "Выполнить", нажимаем F3 и указываем для поиска строку с наименованием созданой нами обертки, например "V83.COMConnector_8.3.9.2033". Или использум для поиска CLSID созданной обертки.

9. Ищем значение в ветке "HKEY_LOCAL_MACHINE" у меня путь такой HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\\ выглядеть должно так


В ветке "InprocServer32" меняем значение у меня, "C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll" на путь к нужной версии длл, в данном случае "C:\Program Files (x86)\1cv8\8.3.9.2033\bin\comcntr.dll".

Данное дейстие проделываем для всех созданных оберток.

Все готово) Для подключения к конкретной версии базы, в 1С теперь нужно использовать следующую конструкцию

В файлах утилита, которая выполнит все эти действия автоматически. Подходит для тех у кого 1С лежит в каталоге

"C:\Program Files (x86)\1cv8". У кого что то отличается, вот ссылка на GitHub . Запустить утилиту нужно от имени администратора. Надеюсь данный материал будет вам полезен)

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Готовые переносы данных

Алкогольная декларация

54-ФЗ

Инструментарий разработчика

Маркетплейсы и 1С

Траектория обучения 1С-разработчика

Управление проектом на Инфостарте

При регистрации библиотек из разных версий 8.3, в одном СОМ приложении, возможно подключиться только к одной из версий.
(15) Решил проблему, создав компоненты в отдельных приложениях СОМ

Спасибо за статью. Мне она помогла, но если просто сделать как написано, возникали ошибки. Куча комментариев с разными ошибками не дали быстрого решения как именно сделать настройки. Предлагаю слегка скорректированный алгоритм. (*) - измененные шаги. В нем нет последних шагов по работе с реестром. У меня сработало на двух серверах.
Если автор посчитает возможным - можно было бы перенести в шапку.

1. Идем "Панель управления" - "Администрирование" - "Службы компонентов"
2. В оснастке служб компонентов, "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+"
3. Создаем новое приложение, правой кнопкой по "Приложения COM+" - "Создать" - "Приложение"
4*. Выбираем "Создать новое приложение", называем например "1cv8", тип выбираем "Серверное приложение",
Учетная запись - Текущий пользователь, Пользователь с ролью Owner - поставил администратора компьютера (сервера).
(без этого возможна ошибка -2147024769(0x8007007F): Не найдена указанная процедура)
5*. Нажимаем правой кнопкой по ветке 1cv8 – Свойства – Безопасность:
- Снимаем галку «Принудительная проверка доступа для приложений»
- Ставим галку «Применить политику программных ограничений»
- Уровень ограничений «Неограниченный»
(без этого возможна ошибка -2147024891(0x80070005): Отказано в доступе)
6. Раскрываем "1cv8", правой кнопкой по "Компоненты" - "Создать" - "Компонент".
7. Выбираем вариант "Установка новых компонентов", находим нашу библиотеку comcntr.dll (той версии платформы, к которой надо будет подключаться)
-* Если установка платформы на сервер не требуется, то достаточно скопировать в некую папку на сервере все содержимое папки bin соответствующей платформы и указать comcntr.dll из этой папки
8. Правой кнопкой по "V83.COMConnector.1" - "Псевдоним. ", меняем наименование с "CopyOf.V83.COMConnector.1" на "V83.COMConnector_8.3.9.2033". Данное действие проделываем для всех нужных версий платформ.



Значит дело было так. Появилась необходимость подключаться к базам по com соединению, для анализа тамошних объектов метаданных. Проблема оказалась в том, что базы могли работать на разных версиях 1С. Пошел в интернет, искал, читал, но все фигня, в оновном все предлагают держать базы на одной версии, что для меня было невозможным.

Кроме, вот этой статьи. Огромное спасибо автору (Леонид Кириенко) и zakiap

Тут уже интересней, но есть пару минусов

1) 1С должна работать от имени учетки с админскими правами.

2) "Варварское" поведение по отношению dllhost.exe :)

3) Могут возникнуть проблемы при одновременном обращении к базам на разных версиях.

Но, как оказалось, самым для меня полезным, оказалась не сама статья, а один из комментариев к ней.


Если присмотрется, то видно, что у него создано несколько оберток для разных версий. Увидев этот коммент, я тут же обрадовался, думал сейчас все расскажут. Но не тут то было, показать, показал, а рассказать забыл)

Инструкция

1. Идем "Панель управления" - "Администрирование" - "Службы компонентов"

2. В оснастке служб компонентов, "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+"

3. Создаем новое приложение, правой кнопкой по "Приложения COM+" - "Создать" - "Приложение"

4. Выбираем "Создать новое приложение", называем например "1cv8", тип выбираем "Библиотечное приложение"

должно полчуить так


5. Раскрываем "1cv8", правой кнопкой по "Компоненты" - "Создать" - "Компонент".

6. Выбираем вариант "Установка новых компонентов", находим нашу библиотеку comcntr.dll

Находится она в катлоге BIN установленной платформы, у меня например путь такой

"C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll"

должны получить следующую картину


7. Правой кнопкой по "V83.COMConnector.1" - "Псевдоним. ", меняем наименование с "CopyOf.V83.COMConnector.1" на "V83.COMConnector_8.3.9.2033". Данное действие проделываем для всех нужных версий платформ.

8. Открываем "regedit" через пуск или команду "Выполнить", нажимаем F3 и указываем для поиска строку с наименованием созданой нами обертки, например "V83.COMConnector_8.3.9.2033". Или использум для поиска CLSID созданной обертки.

9. Ищем значение в ветке "HKEY_LOCAL_MACHINE" у меня путь такой HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\\ выглядеть должно так


В ветке "InprocServer32" меняем значение у меня, "C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll" на путь к нужной версии длл, в данном случае "C:\Program Files (x86)\1cv8\8.3.9.2033\bin\comcntr.dll".

Данное дейстие проделываем для всех созданных оберток.

Все готово) Для подключения к конкретной версии базы, в 1С теперь нужно использовать следующую конструкцию

В файлах утилита, которая выполнит все эти действия автоматически. Подходит для тех у кого 1С лежит в каталоге

"C:\Program Files (x86)\1cv8". У кого что то отличается, вот ссылка на GitHub . Запустить утилиту нужно от имени администратора. Надеюсь данный материал будет вам полезен)

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Готовые переносы данных

Алкогольная декларация

54-ФЗ

Инструментарий разработчика

Маркетплейсы и 1С

Траектория обучения 1С-разработчика

Управление проектом на Инфостарте

При регистрации библиотек из разных версий 8.3, в одном СОМ приложении, возможно подключиться только к одной из версий.
(15) Решил проблему, создав компоненты в отдельных приложениях СОМ

Спасибо за статью. Мне она помогла, но если просто сделать как написано, возникали ошибки. Куча комментариев с разными ошибками не дали быстрого решения как именно сделать настройки. Предлагаю слегка скорректированный алгоритм. (*) - измененные шаги. В нем нет последних шагов по работе с реестром. У меня сработало на двух серверах.
Если автор посчитает возможным - можно было бы перенести в шапку.

1. Идем "Панель управления" - "Администрирование" - "Службы компонентов"
2. В оснастке служб компонентов, "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+"
3. Создаем новое приложение, правой кнопкой по "Приложения COM+" - "Создать" - "Приложение"
4*. Выбираем "Создать новое приложение", называем например "1cv8", тип выбираем "Серверное приложение",
Учетная запись - Текущий пользователь, Пользователь с ролью Owner - поставил администратора компьютера (сервера).
(без этого возможна ошибка -2147024769(0x8007007F): Не найдена указанная процедура)
5*. Нажимаем правой кнопкой по ветке 1cv8 – Свойства – Безопасность:
- Снимаем галку «Принудительная проверка доступа для приложений»
- Ставим галку «Применить политику программных ограничений»
- Уровень ограничений «Неограниченный»
(без этого возможна ошибка -2147024891(0x80070005): Отказано в доступе)
6. Раскрываем "1cv8", правой кнопкой по "Компоненты" - "Создать" - "Компонент".
7. Выбираем вариант "Установка новых компонентов", находим нашу библиотеку comcntr.dll (той версии платформы, к которой надо будет подключаться)
-* Если установка платформы на сервер не требуется, то достаточно скопировать в некую папку на сервере все содержимое папки bin соответствующей платформы и указать comcntr.dll из этой папки
8. Правой кнопкой по "V83.COMConnector.1" - "Псевдоним. ", меняем наименование с "CopyOf.V83.COMConnector.1" на "V83.COMConnector_8.3.9.2033". Данное действие проделываем для всех нужных версий платформ.


3327


956


1352


991


3327


956

в Яндексе посмотреть. Много причин.


960


1401

Будет ли ошибка, если на этом же компьютере выполнить аналогичные действия под другим пользователем?
Ошибка связана с правами доступа и больше относится к администрированию сервера, чем непосредственно к 1С.


391


52


960


1401

Так программа после ошибки запускается или закрывается?
В какой момент появляется ошибка?
Скриншот ошибки можете сюда приложить?


391


52

Вложения:


40


3

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


391


52

в правах доступа данного конкретного компьютера к серверу


162


96

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


391


52

Кэш почистил.
В журнале абсолютно пусто. Точнее "Сеанс. Начало", "Сеанс. Аутентификация" и все.
"относительно другого компьютера присутствует, а относительно этого - нет" - компьютер один, просто с него заходят в Камин под разными пользователями.


3327


956


391


52


391


52

Если на другом компьютере запустить сеанс под "проблемным" пользователем, ошибка проявляется?


3327


956

Если на другом компьютере запустить сеанс под "проблемным" пользователем, ошибка проявляется?

Т.е на одной машине возникает ошибка при запуске сеанса под правами Администратора, а на другой нет. Таким образом можно сделать вывод, что проблема в настройках конкретной машины, т.к. если бы это была ошибка конфигурации, то она проявлялась на любой машине.

Так как текст ошибки системный и в журнале регистрации не фиксируется, определить причину мы не можем. "Поймать" её Вы сможете в режиме отладки именно на этой "проблемной" машине.


391


52

Тут вопрос скорее не об ошибке конфигурации, а что она такое делает под администратором, чего не делает под обычным пользователем. И чего не делала раньше.


До 10 сентября: обязательная активация функционала КОРП для «1С:Предприятия 8 КОРП».
Данная обработка проверяет наличие дополнительных настроек, которые необходимо вернуть в значения по умолчанию(В случае отсутствия таковых лицензий).

Для проверки ваших настроек сервера при отсутствии лицензии "КОРП" - написал обработку, которая проверяет наличие "Особых настроек" - при которых может возникать ошибка:


не более 500 одновременно работающих сеансов пользователей;

не более 12 ядер процессора; Насколько я понял - в случае наличия 13 ядер и выше будут использованы только 12

не используется расширенный функционал КОРП.

Данная обработка проверяет наличие доп. настроек, которые необходимо вернуть в значения по умолчанию

1. Обработка работает во всех конфигурациях:

  • в серверном режиме на платформах 8.3.10 и выше. Рекомендуется 15 платформа
  • в режиме толстого клиента
  • в тонком клиенте ожидается 15 сентября

Update: выложил обработку работающую в тонком клиенте.

2. Для проверки состояния настроек всех баз необходимо иметь одинаковый логин и пароль во всех базах.

4. Иметь административный доступ к базам "Полный доступ"

5. В случае если вы авторизованы в базе на том же сервере - то поля "Администратор ИБ" и "пароль" заполнять не надо

7. Обработка для тонкого клиента будет позже

На рисунке наглядно видно, что все настройки "по умолчанию"


Тут идет пример несоответствия параметров Кластера базы, при котором возможны проблемы при запуске Агента сервера предприятия:



Ниже пример информационной базы с параметрами по умолчанию на 8.3.15 платформе


пример кластера с параметрами по умолчанию на 8.3.15 платформе


пример Рабочего сервера с параметрами по умолчанию на 8.3.15 платформе


Проблемные ситуации:

2. Ошибка при вызове конструктора (COMОбъект): -2147024891(0x80070005): Отказано в доступе

3. Произошла исключительная ситуация: Ошибка операции администрирования Администратор кластера не аутентифицирован

Читайте также: