Устранение ошибки 10016 - DistributedCOM
Внимание! Выполнение предлагаемых ниже команд предполагает понимание смысла операций. Если номер ошибки и её описание не соответствуют изложенному ниже - не применяйте данные команды. Действия, указанные в статье, необходимо выполнять из-под учётной записи с правами Администратора.
Описание проблемы:
В системе Windows10, установленной пользователем, SCADA не отображает данные с удалённого OPC-сервера. Происходит подключение, отображаются тэги, но примитивы с синим «!».
Внимание! Это может быть вызвано некорректными настройками DCOM в операционной системе. Пожалуйста, проверьте настройки DCOM для Windows10 в соответствии со статьёй Настройки DCOM для ОС Windows 10
Возможная причина:
Система Windows CDP Activity store пыталась выполнить действие с сервером Microsoft Windows DistributedCOM, однако настройки разрешения не были предоставлены с помощью локальной активации и служба DCOM перестаёт работать.
Признаки:
В журнале событий СИСТЕМЫ в момент попытки подключения к OPC-серверу появляются ошибки с идентификатором события 10016 - DistributedCOM с описанием
- Источника: Источник ошибки Microsoft Windows DistributedCOM
- Пользователя:SYSTEM пытался использовать DistributedCOM при возникновении ошибки
- Описание: Это говорит вам об ошибке и дает некоторые подсказки.
The application-specific permission settings do not grant Local Activation permission for the COM Server application with
CLSID {8D8F4F83-3594-4F07-8369-FC3C3CAE4919} and APPID {F72671A9-012C-4725-9D2F-2A4D32D65169}
to the user NT AUTHORITY\SYSTEM SID (S-1-5-18) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.
Внимание! В каждом конкретном случае CLSID и APPID могут отличаться от приведённых в статье. В командах ниже необходимо использовать те значения CLSID и APPID, которые указаны в вашей ошибке.
Устранение ошибки
Код ошибки содержит два значения CLSID и APPID, которые необходимо найти с помощью программы Редактор реестра (regedit) в реестре
HKEY_CLASSES_ROOT\CLSID\{8D8F4F83-3594-4F07-8369-FC3C3CAE4919}
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{F72671A9-012C-4725-9D2F-2A4D32D65169}
Внимание! В каждом конкретном случае пути в реестре CLSID и APPID могут отличаться от приведённых в статье. Используйте актуальные пути
Скачайте утилиту SetACL по ссылке https://helgeklein.com/downloads/SetACL/current/SetACL (executable version).zip и разархивируйте нужную версию (х32 или x64) в папку c:\windows\system32\
Запустите командную строку от имени администратор и выполните последовательно следующие команды:
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{8D8F4F83-3594-4F07-8369-FC3C3CAE4919}" -ot reg -actn setowner -ownr "n:Administrators"
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{8D8F4F83-3594-4F07-8369-FC3C3CAE4919}" -ot reg -actn ace -ace "n:Administrators;p:full"
SetACL.exe -on "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{F72671A9-012C-4725-9D2F-2A4D32D65169}" -ot reg -actn setowner -ownr "n:Administrators"
SetACL.exe -on "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{F72671A9-012C-4725-9D2F-2A4D32D65169}" -ot reg -actn ace -ace "n:Administrators;p:full"
После ввода каждой команды должно появляться сообщение
SetACL finished successfully.
Перейдите в оснастку Службы компонентов в разделе Панель управления -> Администрирование и откройте ветку Настройки DCOM. Выберите в настройках Вид - Подробно и найдите в конце списка компонент с APPID указанным в ошибке. В данном случае это {F72671A9-012C-4725-9D2F-2A4D32D65169}. Откройте его Свойства, раздел Разрешения на запуск и активацию. Выберите пункт Настроить и добавьте пользователя СИСТЕМА (SYSTEM). Установите его права на локальную активацию.
Выполните команду
SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{8D8F4F83-3594-4F07-8369-FC3C3CAE4919}" -ot reg -actn setowner -ownr "n:SYSTEM"
SetACL.exe -on "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{F72671A9-012C-4725-9D2F-2A4D32D65169}" -ot reg -actn setowner -ownr "n:NT SERVICE\TrustedInstaller"
Перезагрузите систему.
Вышеописанный способ позволяет устранить ошибку DCOM только для подсистемы CDP Activity store, однако принципы, указанные в статье, позволят устранить такую же ошибку DCOM для других подсистем с другими CLSID и APPID.