В этой заметке я покажу, как исправить ошибку c Event ID 10016 от источника DistributedCOM на компьютере с Windows 10 / Windows Server 2012 R2. Ошибка DCOM 10016 довольно часто встречается как в клиентских, так и в серверных версиях Windows, начиная еще со времен Windows XP и исправляется она одинаково, независимо от редакции Windows.
Проблема проявляется следующим образом: в журнале событий системы при загрузке компьютера или попытке запуска/установки приложения появляется следующая ошибка:
Log Name : Система
Source : DistributedCOM
Event ID : 10016
Level : Ошибка
User : SYSTEM
Описание : Параметры разрешений для конкретного приложения не дают разрешения Локальный Запуск для приложения COM-сервера с CLSID {1CCB96F4-B8AD-4B43-9688-B273F58E0910} и APPID {AD65A69D-3831-40D7-9629-9B0B50A93843}пользователю NT AUTHORITYсистема с SID (S-1-5-18) и адресом LocalHost (с использованием LRPC). Это разрешение безопасности можно изменить с помощью служебной программы управления службами компонентов.
В англоязычных версиях Windows описание ошибки такое:
The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID
{000209FF-0000-0000-C000-000000000046} and APPID Unavailable to the user IIS APPPOOLappIISPool SID (S-1-5-82-3351576649-1006875745-771203599-42452693-1279824824) 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.
Судя по описанию ошибки: некий пользователь (например, IIS Apppool) или система (NT AUTHORITYсистема) пытается запустить некий компонент COM с помощью инфраструктуры DCOM и не может этого сделать из-за отсутствия права «Локальный Запуск» или «Локальная активация» (Local Activation Permission). В коде ошибки содержатся только коды классов COM компонента и приложения. Попробуем определить, какому именно приложению принадлежит идентификатор и предоставить права, необходимые для его запуска.
Из описания события необходимо скопировать идентификаторы CLSID и APPID. В моем случае это
CLSID : {000209FF-0000-0000-C000-000000000046}
APPID: {AD65A69D-3831-40D7-9629-9B0B50A93843}
(в некоторых случаях идентификатор приложения может быть не указан — APPID Unavailable).
Также обратите внимание каких разрешений не хватает (Local Activation permission) и для какой учетной записи (NT AUTHORITYSYSTEM или IIS APPPOOLappIISPool SID — S-1-5-82-3351576649-1006875745-771203599-42452693-1279824824).
- Запустите редактор реестра (regedit.exe);
- Перейдите в ветку реестра, соответствующую вашему CLSID. У меня это HKEY_CLASSES_ROOTCLSID {000209FF-0000-0000-C000-000000000046};В некоторых случаях нужно смотреть также в разделе реестра [HKEY_CLASSES_ROOTWow6432NodeCLSID. При удаленном подключении к реестру он будет находиться в разделе HKEY_LOCAL_MACHINESOFTWAREClassesAppID.
- В параметре класса должно быть указано имя. У меня это Microsoft Word Application;Чаще всего эта проблема возникает с компонентами:
Immersive Shell
CLSID: {C2F03A33-21F5-47FA-B4BB-156362A2F239}
APPID: {316CDED5-E4AE-4B15-9113-7055D84DCC97}
RuntimeBroker
CLSID: {D63B10C5-BB46-4990-A94F-E40B9D520160}
APPID : {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} - Щелкните правой кнопкой мыши по разделу реестра и выберите пункт Permissions (Разрешения);
- Нажмите на кнопку Advanced;
- В разделе Owner (Владелец) будет указано NT ServiceTrustedInstaller или System ;
- Нажмите кнопку Change и укажите имя своей учетной записи администратора. Сохраните изменения;
- Обратите внимание, что имя владельца ветки сменилось на вашу учетную запись. Поставьте галку Replace owner on subcontainers and objects (Заменить владельца подконтейнеров и объектов) и нажмите “ОК”;
- В списке разрешений добавьте вашу учетную запись администратора и предоставьте ей полный доступ (Full Permissions);
- Вы предоставили права на ветку с CLSID. Теперь нужно повторить предыдущие шаги, предоставив учетной записи администратора права на ветку с вашим идентификатором APPID из текста ошибки (например, HKEY_CLASSES_ROOTAppID {AD65A69D-3831-40D7-9629-9B0B50A93843};
- Теперь запустите консоль управления компонентами dcomcnfg с правами администратора (Control PanelAll Control Panel ItemsAdministrative ToolsComponent Services);
- В консоли компонентов перейдите в ветку Component Services -> Computers -> My computer -> DCOM Config . В списке компонентов найдите имя компонента, которое вы определили на втором шаге (значение в столбце Application ID должно соответствовать вашему CLSID из ошибки). Откройте свойства компонента; Если вы не можете найти свой компонент в списке, вероятно у вас 64 битная версия Windows, а запускаемый компонент является 32 битным. В этом случае нужно запустить консоль DCOM командой:
mmc comexp.msc /32
- Перейдите на вкладку Security . Все элементы управления должны быть доступными для изменения; Если открыть консоль dcomcnfg до изменения разрешений на ветку реестра, все настройки на вкладке Security окажутся заблокированы (недоступны для изменения), несмотря на то, что вы запустили консоль от имени администратора.
- В моем случае приложению не хватало прав на «Локальный Запуск» (Local Activation Permission). В секции Launch and Activation Permissions выберите Customize и нажмите кнопку Edit;
- В список доступа нужно добавить учетную запись, которой не хватало разрешений на запуск. Имя учетной записи было указано в тексте ошибки: в зависимости от текста в ошибке DCOM 10016 это может быть System , конкретный пользователь или учетка под которой запускается пул IIS (в этом случае нужно добавить доступ для локальной группы IIS_IUSR).Совет. Если в начальном логе ошибки вместо NT AUTHORITYсистема была указана NT AUTHORITYNETWORK SERVICE, необходимо дать права на локальный запуск и активацию для учетной записи NetworkService.
- Предоставьте нужные разрешения для учетной записи. Например, Local Activation -> Allow и Local Launch (Локальная активация) -> Allow;
- Перезагрузите компьютер и проверьте журналы событий. Ошибка DCOM 10016 должна исчезнуть.