У цій замітці я покажу, як виправити помилку 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 APPPOOL \ appIISPool 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 AUTHORITY \ SYSTEM або IIS APPPOOL \ appIISPool SID - S-1-5-82-3351576649-1006875745-771203599-42452693-1279824824).
У кожному конкретному випадку ідентифікатори класу, додатки, облікового запису і типу доступу може відрізнятися.- Запустіть редактор реєстру (regedit.exe);
- Перейдіть в гілку реєстру, що відповідає вашому CLSID. У мене це HKEY_CLASSES_ROOT \ CLSID \000209FF-0000-0000-C000-000000000046; У деяких випадках потрібно дивитися також в розділі реєстру [HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID \. При віддаленому підключенні до реєстру він буде перебувати в розділі HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ AppID.
- У параметрі класу має бути зазначено ім'я. У мене це 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 Service \ TrustedInstaller або System;
- Натисніть кнопку Change і вкажіть ім'я свого облікового запису адміністратора. Збережіть зміни;
- Зверніть увагу, що ім'я власника гілки змінилося на ваш обліковий запис. поставте галку Replace owner on subcontainers and objects (Замінити власника подконтейнеров і об'єктів) і натисніть "ОК";
- У списку дозволів додайте ваш обліковий запис адміністратора і надайте їй повний доступ (Full Permissions);
- Ви надали права на гілку з CLSID. Тепер потрібно повторити попередні кроки, надавши облікового запису адміністратора права на гілку з вашим ідентифікатором APPID з тексту помилки (наприклад, HKEY_CLASSES_ROOT \ AppID \AD65A69D-3831-40D7-9629-9B0B50A93843;
- Тепер запустіть консоль управління компонентами dcomcnfg з правами адміністратора (Control Panel \ All Control Panel Items \ Administrative Tools \ Component 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 AUTHORITY \ NETWORK SERVICE, необхідно дати права на локальний запуск і активацію облікового запису NetworkService.
- Надайте потрібні дозволи для облікового запису. Наприклад, Local Activation -> Allow і Local Launch (Локальна активація) -> Allow;
- Перезавантажте комп'ютер і перевірте журнали подій. Помилка DCOM 10016 повинна зникнути.