Помилка DistributedCOM 10016 в Windows Параметри дозволів для програми не дають дозволу локальної активації

У цій замітці я покажу, як виправити помилку 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).

У кожному конкретному випадку ідентифікатори класу, додатки, облікового запису і типу доступу може відрізнятися.
  1. Запустіть редактор реєстру (regedit.exe);
  2. Перейдіть в гілку реєстру, що відповідає вашому CLSID. У мене це HKEY_CLASSES_ROOT \ CLSID \000209FF-0000-0000-C000-000000000046; У деяких випадках потрібно дивитися також в розділі реєстру [HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID \. При віддаленому підключенні до реєстру він буде перебувати в розділі HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ AppID.
  3. У параметрі класу має бути зазначено ім'я. У мене це 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
  4. Клацніть правою кнопкою миші по розділу реєстру і виберіть пункт Permissions (Дозволи);
  5. Натисніть на кнопку Advanced;
  6. В розділі Owner (Власник) буде вказано NT Service \ TrustedInstaller або System;
  7. Натисніть кнопку Change і вкажіть ім'я свого облікового запису адміністратора. Збережіть зміни;
  8. Зверніть увагу, що ім'я власника гілки змінилося на ваш обліковий запис. поставте галку Replace owner on subcontainers and objects (Замінити власника подконтейнеров і об'єктів) і натисніть "ОК";
  9. У списку дозволів додайте ваш обліковий запис адміністратора і надайте їй повний доступ (Full Permissions);
  10. Ви надали права на гілку з CLSID. Тепер потрібно повторити попередні кроки, надавши облікового запису адміністратора права на гілку з вашим ідентифікатором APPID з тексту помилки (наприклад, HKEY_CLASSES_ROOT \ AppID \AD65A69D-3831-40D7-9629-9B0B50A93843;
  11. Тепер запустіть консоль управління компонентами dcomcnfg з правами адміністратора (Control Panel \ All Control Panel Items \ Administrative Tools \ Component Services);
  12. В консолі компонентів перейдіть в гілку Component Services -> Computers -> My computer -> DCOM Config. У списку компонентів знайдіть ім'я компонента, яке ви визначили на другому кроці (значення в стовпці Application ID повинно відповідати вашому CLSID з помилки). Відкрийте властивості компонента; Якщо ви не можете знайти свій компонент в списку, ймовірно у вас 64 бітна версія Windows, а запускається компонент є 32 бітовим. В цьому випадку потрібно запустити консоль DCOM командою: mmc comexp.msc / 32
  13. Перейдіть на вкладку Security. Всі елементи управління повинні бути доступними для зміни; Якщо відкрити консоль dcomcnfg до зміни дозволів на гілку реєстру, всі налаштування на вкладці Security виявляться заблоковані (недоступні для зміни), незважаючи на те, що ви запустили консоль від імені адміністратора.
  14. У моєму випадку з додатком не вистачало прав на "Локальний Запуск" (Local Activation Permission). У секції Launch and Activation Permissions виберіть Customize і натисніть кнопку Edit;
  15. У список доступу потрібно додати обліковий запис, якої не вистачало дозволів на запуск. Ім'я облікового запису було вказано в тексті помилки: в залежності від тексту в помилку DCOM 10016 це може бути System, конкретний користувач або учетка під якою запускається пул IIS (в цьому випадку потрібно додати доступ для локальної групи IIS_IUSR).Порада. Якщо в початковому балці помилки замість NT AUTHORITY \ система була вказана NT AUTHORITY \ NETWORK SERVICE, необхідно дати права на локальний запуск і активацію облікового запису NetworkService.
  16. Надайте потрібні дозволи для облікового запису. Наприклад, Local Activation -> Allow і Local Launch (Локальна активація) -> Allow;
  17. Перезавантажте комп'ютер і перевірте журнали подій. Помилка DCOM 10016 повинна зникнути.