В DCOM нет Microsoft Excel Application
Добрый день! Уважаемые читатели и гости IT блога. Чуть ранее мы с вами производили базовую настройку объектов DCOM для Excel.Application в связке 1С. Сегодня я хочу продолжить данную тематику, и описать ситуацию, когда при попытке импортировать данные из файла Excel, выскакивает ошибка доступа к нему при вызове метода контекста. Microsoft Excel. Ранее, что-то подобное я устранял, но уже честно не помнил, как и что нужно было делать. Так что заново разбираюсь и документирую это.
Почему в В DCOM нет Microsoft Excel Application?
Обратились коллеги с проблемой, что не получается загрузить Excel файл в базу 1С. В окне ошибки вот такой текст:
Ошибка открытия файла MS Excel. Ошибка при вызове метода контекста. Microsoft Excel cannot acces the file "C:\users\логин|AppData\Local\Temp\". There are possibble reasons:
The file name or path does not exist.
The file is being used by another program.
The workbook you are trying to save has same name as a currently open workbook
Ранее все решалось добавлением прав на объект Microsoft Excel Application в DCOM, но его просто не оказалось в оснастке DCOMCNFG.
Исходя из практики я могу выделить вот такие проблемы:
- Нет прав на нужные каталоги
- Нет записи в реестра
- Может быть поврежден компонент в MS Office
- Не зарегистрирован компонент Excel
Запуск 32-х битной версии оснастки DCOMCNFG
Прежде чем вы начнете ремонт и траблшутинг вашей проблемы, я вам рекомендую проверить какую версию MS Office вы используете, если она 32-ъ битная, то убедитесь, что Microsoft Excel Application отсутствует при вызове оснастки:
mmc comexp.msc /32
В результате службы компонентов будут запущены в 32-х разрядном режиме. Может сложиться ситуация, что тут Microsoft Excel Application будет доступен для дальнейшей работы и настройки прав.
Еще больше про mmc оснастки смотрите по ссылке
Настройка прав на systemprofile
Прежде всего, вам потребуется проверить наличие прав пользователя от которого работает служба 1С, на папку:
C:\Windows\SysWOW64\config\systemprofile\Desktop\
Данная папка используется для хранения настроек и файлов рабочего стола профиля системы. Данная папка systemprofile относится к профилю, который используется для выполнения задач от имени SYSTEM. Это может быть полезно для служб и приложений, которые работают в контексте системного пользователя.
Многие службы Windows или фоновые процессы могут использовать этот профиль для выполнения своих задач. Если служба, работающая от имени системного профиля, пытается получить доступ к рабочему столу (например, для отображения пользовательского интерфейса), она будет обращаться к этой папке.
Самый быстрый метод посмотреть списки доступа к ней, это воспользоваться PowerShell командами:
$directoryPath = "C:\Windows\SysWOW64\config\systemprofile\Desktop"
$acl = Get-Acl -Path $directoryPath
$aceTable = @()foreach ($ace in $acl.Access) {
$aceTable += [PSCustomObject]@{
Identity = $ace.IdentityReference
FileSystemRights = $ace.FileSystemRights
AccessControlType = $ace.AccessControlType
}
}$aceTable | Format-Table -AutoSize
В моем примере его не было, и необходимо его было добавить вот с такими разрешениями:
- List folder contents
- Read
- Write
Для этого вызываем контекстное меню у папки Desktop, переходим в свойства и через кнопку "Изменить" добавляем нужного пользователя или группу безопасности, правильно выставив галочки.
После этих манипуляций 1ска стала спокойно подгружать Excel файлы и ошибка при вызове метода контекста. Microsoft Excel cannot acces the file пропала.
Проверка записей реестра
Вторым шагом вам нужно проверить, что есть запись в реестре, которая описывает права доступа к объектам COM. Запустите реестр Windows и проверьте наличие ветки:
Computer\HKEY_CLASSES_ROOT\AppID\{00020812-0000-0000-C000-000000000046}
- CLSID принадлежит библиотеке Microsoft Office, которая используется для управления различными аспектами работы приложений пакета Office.
- AppID (Application Identifier) – это уникальный идентификатор приложения, который регистрируется в реестре Windows для определения параметров безопасности и поведения приложения при работе с объектами COM. В данном случае, ключ {00020812-0000-0000-C000-000000000046} может относится к Microsoft Excel.
Изменение или удаление этой ветки реестра без должного понимания последствий может привести к проблемам в работе приложений Microsoft Office. Если у вас возникли проблемы с работой Office, рекомендуется обратиться за помощью к специалистам или использовать встроенные средства диагностики и восстановления Microsoft Office.
Вот так должен выглядеть рабочий вариант. Тут как минимум должны быть две записи AccessPermission и LaunchPermission.
AccessPermission и LaunchPermission — это два типа разрешений, которые управляют доступом к компонентам и объектам, зарегистрированным в DCOM. Они определяют, кто может запускать и взаимодействовать с этими компонентами.
AccessPermission определяет, какие пользователи или группы пользователей имеют право на доступ к уже запущенным объектам DCOM. Это включает в себя разрешения на выполнение различных операций, таких как:
- Чтение свойств объекта.
- Вызов методов объекта.
- Подписка на события объекта.
LaunchPermission определяет, кто может создавать экземпляры (или запускать) DCOM-компонентов. Это разрешение нужно для того, чтобы контролировать, кто может инициировать создание нового объекта в DCOM-среде. Если у пользователя нет соответствующих прав, он не сможет запустить компонент, даже если у него есть доступ к уже существующим экземплярам этого компонента.
Разрешения для LaunchPermission также могут быть настроены для отдельных пользователей или групп и могут включать:
- Launch: Право на запуск компонента.
- Activate: Право на активацию объекта.
На сервере, где была ошибка при загрузке файла Excel в базу 1с, ветка реестра содержала вот такой набор. Как видите AccessPermission и LaunchPermission отсутствуют.
Может случиться, что ее вообще и не будет, поэтому я вам советую произвести импортирование рабочей ветки реестра. Для этого создайте текстовый файл, с содержимым указанным ниже, а затем сохраните его с расширением reg.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\AppID\{00020812-0000-0000-C000-000000000046}]
@="Microsoft Excel Application"
"AccessPermission"=hex:01,00,04,80,80,00,00,00,90,00,00,00,00,00,00,00,14,00,\
00,00,02,00,6c,00,04,00,00,00,00,00,24,00,03,00,00,00,01,05,00,00,00,00,00,\
05,15,00,00,00,ee,94,02,07,9d,be,da,52,07,e5,3b,2b,ab,68,00,00,00,00,14,00,\
07,00,00,00,01,01,00,00,00,00,00,05,0a,00,00,00,00,00,14,00,03,00,00,00,01,\
01,00,00,00,00,00,05,12,00,00,00,00,00,18,00,07,00,00,00,01,02,00,00,00,00,\
00,05,20,00,00,00,20,02,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,\
00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00
"LaunchPermission"=hex:01,00,04,80,80,00,00,00,90,00,00,00,00,00,00,00,14,00,\
00,00,02,00,6c,00,04,00,00,00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,00,\
05,12,00,00,00,00,00,18,00,1f,00,00,00,01,02,00,00,00,00,00,05,20,00,00,00,\
20,02,00,00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,00,05,04,00,00,00,00,\
00,24,00,0b,00,00,00,01,05,00,00,00,00,00,05,15,00,00,00,ee,94,02,07,9d,be,\
da,52,07,e5,3b,2b,ab,68,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,\
00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00
Данный файл просто добавит нужные ключи к текущей ветке {00020812-0000-0000-C000-000000000046}, а если ее нет, то полностью ее воссоздаст.
Скачать готовый ключ реестра для создания ветки {00020812-0000-0000-C000-000000000046}
Восстановление компонентов MS Officce
Еще одним из возможных вариантов решения проблемы будет попытка локальной проверки на предмет повреждения компонентов Microsoft Office и их локальное или онлайн восстановление. Для этого откройте окно программы и компоненты, далее правым кликом по записи Microsoft Office. Далее из контекстного меню выберите вариант восстановления. Я советую воспользоваться для начала локальным, если не поможет можно попробовать через интернет.
Еще я встречал ситуацию, что в операционной системе присутствовало, аж 4 версии офиса, и немудрено. что они могли конфликтовать друг с другом. Поэтому в такой ситуации вам необходимо произвести удаление лишних Microsoft Office, обязательно перезагрузить систему.
Повторная регистрация компонентов Excel
Если ничего не помогает, попробуйте заново произвести регистрацию компонентов Microsoft Excel. Для этого вам необходимо запустить командную строку от имени администратора и пройти в расположение с исполняемым файлом.
C:\Program Files\Microsoft Office\root\Office16 (Рапример Office 2021 находится по такому пути)
Далее выполнить:
excel.exe /regserver или если не зашли в расположение, то можно из любой точки "C:\Program Files\Microsoft Office\root\Office16\excel.exe" /regserverё
На этом у меня все, теперь ошибка Microsoft Excel cannot acces the file не должна у вас появляться.