Trong bài đăng này, tôi sẽ chỉ cho bạn cách khắc phục lỗi với EventID 10016 từ nguồn DistributedCOM trên máy tính chạy Windows 10 hoặc Windows Server 2012 R2. Sự kiện DCOM 10016 khá phổ biến trong cả phiên bản client và server của Windows, bắt đầu từ Windows XP và bạn có thể khắc phục lỗi này theo cùng một cách bất kể phiên bản Windows.
Vấn đề thể hiện như sau: lỗi sau xuất hiện trong Windows Event Viewer trong phần System khi máy tính khởi động hoặc cố gắng khởi động hoặc cài đặt một số ứng dụng:
Log Name: System
Source: DistributedCOM
Event ID: 10016
Level: Error
User: SYSTEM
Description: 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.
Theo mô tả lỗi: một số người dùng (ví dụ: IIS Apppool) hoặc hệ thống (NT AUTHORITY\SYSTEM) cố gắng khởi động một số thành phần COM bằng cơ sở hạ tầng DCOM và không thể làm được do thiếu quyền “Local Launch” hoặc “Local Activation”. Mã lỗi chỉ chứa mã lớp cho thành phần COM và ứng dụng. Hãy thử xác định ứng dụng cụ thể mà định danh thuộc về và cấp quyền cần thiết để khởi động và kích hoạt nó thành công.
Sao chép CLSID và APPID từ mô tả sự kiện. Trong trường hợp của tôi là:
CLSID : {000209FF-0000-0000-C000-000000000046}
APPID: {AD65A69D-3831-40D7-9629-9B0B50A93843}
(trong một số trường hợp, định danh ứng dụng có thể không được chỉ định – APPID Unavailable).
Cũng lưu ý quyền nào bị thiếu (Local Activation permission) và cho tài khoản nào (NT AUTHORITY\SYSTEM hoặc IIS APPPOOL\appIISPool SID — S-1-5-82-3351576649-1006875745-771203599-42452693-1279824824).
Trong mỗi trường hợp, định danh lớp, ứng dụng, tài khoản và loại truy cập có thể khác nhau.
- Chạy Registry Editor (regedit.exe);
- Đi tới khóa registry tương ứng với CLSID của bạn. Trong trường hợp của tôi là HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}; Trong một số trường hợp, bạn cũng cần kiểm tra khóa registry HKEY_CLASSES_ROOT\Wow6432Node\CLSID\. Khi kết nối từ xa đến registry, nó sẽ nằm trong phần registry HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID.
- Trong tham số lớp, tên ứng dụng phải được chỉ định (trong trường hợp của tôi là Microsoft Word Application); Thường xuyên nhất, lỗi DCOM 10016 xảy ra với các thành phần sau: 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} - Nhấp chuột phải vào khóa registry và chọn Permissions;
- Nhấp vào nút Advanced;
- NT Service\TrustedInstaller hoặc SYSTEM sẽ được chỉ định trong phần Owner;
- Nhấp nút Change và chỉ định tên tài khoản quản trị viên của bạn. Lưu thay đổi;
- Lưu ý rằng tên chủ sở hữu khóa registry hiện tại đã thay đổi thành tài khoản của bạn. Tích hộp Replace owner on subcontainers and objects và nhấp “OK”;
- Thêm tài khoản quản trị viên của bạn vào danh sách quyền và cấp quyền Full Control cho nó;
- Bạn đã cấp quyền cho khóa registry với CLSID. Bây giờ bạn cần lặp lại các bước trước và thay đổi quyền sở hữu và quyền cho tài khoản quản trị viên trên khóa registry của APPID từ mô tả lỗi (ví dụ, HKEY_CLASSES_ROOT\AppID\{AD65A69D-3831-40D7-9629-9B0B50A93843});
- Bây giờ chạy console quản lý thành phần (dcomcnfg) với tư cách quản trị viên (Control Panel -> All Control Panel Items -> Administrative Tools -> Component Services);
- Trong console thành phần đi tới phần Component Services -> Computers -> My computer -> DCOM Config. Trong danh sách thành phần COM tìm tên thành phần bạn đã xác định ở bước 2 (giá trị trong cột Application ID phải khớp với CLSID của bạn từ mô tả lỗi DCOM 10016); Nếu bạn không tìm thấy thành phần của mình trong danh sách, bạn có thể đang sử dụng phiên bản 64-bit của Windows, và thành phần bạn muốn chạy là 32-bit. Trong trường hợp này, bạn cần khởi động console DCOM bằng lệnh:
mmc comexp.msc /32. - Nhấp tab Security. Tất cả các điều khiển biểu mẫu phải có thể truy cập để thay đổi; Nếu bạn mở console dcomcnfg trước khi thay đổi quyền trên khóa registry thành phần, tất cả cài đặt trên tab Security sẽ bị khóa (không thể thay đổi), mặc dù bạn đã khởi động console với tư cách quản trị viên.
- Trong trường hợp của tôi, ứng dụng không có quyền Local Activation. Trong phần Launch and Activation Permissions, chọn Customize và nhấp nút Edit;
- Bạn cần thêm vào ACL tài khoản được chỉ định trong mô tả lỗi. Tùy thuộc vào văn bản trong lỗi DCOM 10016, đây có thể là SYSTEM, một người dùng cụ thể, hoặc tài khoản mà IIS pool chạy (trong trường hợp này, bạn cần thêm quyền truy cập cho nhóm IIS_IUSR cục bộ); Nếu NT AUTHORITY\NETWORK SERVICE được chỉ định trong lỗi ban đầu thay vì NT AUTHORITY\SYSTEM, bạn phải gán quyền local launch và activation cho tài khoản NetworkService.
- Cấp quyền cần thiết cho tài khoản. Ví dụ, Local Launch = Allow và Local Activation = Allow.
- Khởi động lại máy tính và kiểm tra nhật ký sự kiện. Lỗi DCOM 10016 nên biến mất.