Windows10 の DistributedCOM イベント 10016 エラーを修正・解決する

Windows10 DistributedCOM イベント 10016 エラーを修正

DistributedCOM イベント 10016 エラーは修正する方法があり、この記事では修正手順を紹介しますが、エラーログがあるというだけで特に問題が無いのであれば放っておくことをおすすめします。
このエラーは正常な PC でも大量に発生しています。
該当者が全員なので気にする人も多く、検索すると修正方法を紹介した記事が沢山出てきます。
そこで筆者としては気になったのが、イベント 10016 エラーの意味には触れずに解決手順だけを掲載している記事が多いことです。

誰もが「エラーは良くないこと」と考えるかと思いますが、10016 エラー関しては必ずしもそうとは言い切れません。
10016 エラーは簡単に言えば DCOM へのアクセス権の問題から引き起こされるエラーです。
では DCOM が何なのかを知らなくてはなりません。

Microsoft のソフトウェア基盤 COM(Component Object Model)は、機能ごとに部品化されたコンポーネントを色々なアプリケーションで利用するための仕組みで、皆さんに馴染みがあるのは DirectX や ActiveX コントロールがそれにあたります。
COM を PC 内だけではなくネットワークを経由して利用可能としたのが DCOM です。

ではこの COM や DCOM でアクセスエラーが出たとして、それは「アクセスできていない」と捉えることもできますが、「ブロックしてアクセスさせていない」とも捉えることができます。
イベント 10016 エラーが出ないようにするためには該当アプリケーションのアクセス権を引き上げてやる必要があります。
ですが DCOM はウィルスの感染経路の一つでもあります。

このような性質のエラー表示であることから、出ているもの全てを修正すればよいというものではないです。
動かないアプリケーションなどがあったときに、ウィンドウズログでエラーが出てないか確認し、そのアプリが 10016 エラーを出していれば個別に修正するというのが正しい判断かと思います。

自分で入れたアプリ以外にもシステムレベルでいくつも出ていると思いますが、そのエラーによりどのような問題が起きているのか理解できていないのであれば修正するに値しません。
「PC が調子悪いからウィンドウズログを見たら大量の 10016 エラーがあったから原因はこれだ」という流れで修正する人が多いと思いますが、DCOM の性質上調子が悪くなるとかそういうものではなく、何かが全く出来なくなるというものです。
PC が調子が悪いのは間違いなく別の問題です。10016 エラーを修正して PC の調子が良くなったという話は聞いたことがありません。

例えば以下で説明する手順でアプリ ID を辿っていくと、誰もがそのうちの一つの原因に RuntimeBroker が該当すると思いますが、これに関しても Microsoft 公式で以下のように記載されています。

原因
これらの 10016 イベントは、Microsoft コンポーネントが必要なアクセス許可を持たずに DCOM コンポーネントにアクセスしようとすると記録されます。 このケースでは、この動作は仕様通りです。
コーディング パターンは、最初にパラメーターのセットにある DCOM コンポーネントにアクセスするコードが実装されています。
最初の試行が失敗した場合は、別のパラメーター セットで再度試行します。 最初の試行がスキップされない理由は、シナリオが正常にないためです。 そのようなシナリオでは、それが推奨されています。

回避策
これらのイベントは、機能に悪影響を及ぼさず設計されているので、無視できます。 これは、これらのイベントに対するお勧めのアクションです。

最後にもう一度言いますが、全てのエラーを修正しても Windoows アップデートや新しいアプリを入れることで新たなエラーが追加されます。
筆者はこのエラーで動かない何かに遭遇したことが無いので、手順は解説しますが自分はやっていません。
修正・解決手順は以下に記載しますが、レジストリもいじる必要があるので手間がかかることは覚悟して下さい。

コンポーネントサービスの修正

まず最初に DistributedCOM イベント 10016 エラーの詳細を確認します。
「PC」を右クリックし「管理」を開く。

Windows10 DistributedCOM イベント 10016 エラーを修正

システムツール>イベントビューアー>カスタムビュー>管理イベント を開く。
修正したいエラーを選択し、説明文の中の「APPID」の{ }の中を、右クリックは出来ないので「Ctrl+C」キーでコピー。
ユーザー欄に表示されてる文字列も覚えておく。

中には APPID が無い物もあり、その場合は「CLSID」の方を使い、以下の作業は飛ばしていきなりレジストリをいじることになります。
レジストリ編集の項目で APPID を CLSID に置き換えて作業して下さい。

Windows10 DistributedCOM イベント 10016 エラーを修正

コントロールパネル>管理ツール>コンポーネントサービス を開く。

コンポーネントサービス>コンピューター>マイコンピューター>DCOMの構成 を開く。
ここで右側のウィンドウ内で、エラーの説明文にあった APPID を探して選択。
該当項目を右クリックし、プロパティを選択。

Windows10 DistributedCOM イベント 10016 エラーを修正

「セキュリティ」のタブ内の「起動とアクティブ化のアクセス許可」項目内の「編集」を開く。
(ここで全てグレーアウトしていて操作できない場合が多い、その場合先にレジストリを変更する必要がある。)
エラーの説明文にあった文字列を選択し、「ローカルからのアクティブ化」 にチェックを入れる。
該当ユーザー名が無い場合は「追加」から作成する。
この時点で解決する場合もあるので数日様子を見ても良いが、解決しない場合の方が多いため確認せずにこのままレジストリの設定に進んでもいいです。

Windows10 DistributedCOM イベント 10016 エラーを修正

修正しようとしているエラーの元が「RuntimeBroker」だった場合は更に作業が増えます。
RuntimeBroker はこの後行うレジストリでのアクセス許可を受け付けないので、この段階でグループ名またはユーザー名に「LOCAL SERVICE」を加えてやり、「ローカルからのアクティブ化」 と「ローカルからの起動」にチェックを入れる必要があります。
以下のレジストリ編集の項目の作業を終えて用が済んだら作成した LOCAL SERVICE は削除して問題ないはずです。

レジストリ編集

コンポーネントサービスの操作だけでは改善されないか、グレーアウトしていて操作できなかった場合は、レジストリエディタからアクセス許可の設定を行う。
「Windows キー」+「R」またはスタートメニューを右クリックから「ファイル名を指定して実行」を開き、「regedit」と入力しレジストリエディタを起動する。

「Ctrl+F」キーで検索ウィンドウを表示し、先程コピーした APPID を貼り付け検索する。
同じキー名で複数登録がありますが、修正するのは「HKEY_Classes_Root」内の「APPID(エラーによってはCLSID)」なので、フォルダツリーの「APPID」を選択状態で検索すると良いでしょう。

Windows10 DistributedCOM イベント 10016 エラーを修正

キーが見つかったら右クリックし「アクセス許可」を選択。

Windows10 DistributedCOM イベント 10016 エラーを修正

アクセス許可のウィンドウで「詳細設定」を開く。
所有者の列の変更をクリック。
選択するオブジェクト名の欄に「Administrators」と入力しOK。
この時点で青枠の「サブコンテナーとオブジェクトの所有者を置き換える」というチェック項目が出現するのでチェックを入れる。
一旦アクセス許可のウィンドウまで閉じる。

Windows10 DistributedCOM イベント 10016 エラーを修正

もう一度アクセス許可を開き、Administrators とエラーの詳細説明欄にあったユーザー名両方にフルコントロールを与え、適用>OK。
レジストリエディタを終了する。

Windows10 DistributedCOM イベント 10016 エラーを修正

これで数日間 DistributedCOM イベント 10016 エラーが出ないことを確認する。
非常に面倒くさい修正作業ではありますが、根気よく全部潰していけば完全解決は可能です。
新しいアプリケーションをインストールなどすると新たに DistributedCOM イベント 10016 エラーが登場するので、そのときはまたこの修正作業で解決して下さい。

コメント