コンポーネントサービスの参照でエラーが出る

TROUBLE REPORT


コンポーネントサービス

Microsoft Windows XP Professional にて、"コンポーネントサービス" を参照してみたところ、エラーが発生してしまいました。

最後の操作の処理中にエラーが発生しました。

エラー コード 80080005 - サーバーの実行に失敗しました。

コンポーネントサービスは、COM コンポーネントを登録するときなどに個人的には利用することが多かったのですけど、この中のちょうど "COM+ アプリケーション" の一覧を参照しようとすると上記のエラーが発生してしまったのでした。

ここ数日でさまざまなアプリケーションをインストールしたり削除したりしてしまっていたので、そして利用することが多いとはいえ、使うときには良く使う程度なので、どのタイミングでこのようなエラーになったのか判断することが出来ませんでした。

 

原因を調べてみる

ともあれエラーを知らせるダイアログには、イベントビュアにも情報が載っているようなことが記されていたので、それを確認してみました。すると、とりあえず目に付いたのが "COM+" をソースとする次のようなエラーでした。

TransactionManager->GetWhereabouts に失敗しました。分散トランザクション コーディネータがトランザクションを調整するためにリモート ホストを使用する場合、コーディネータはリモート ホストに接続できません。コンポーネント サービス MMC スナップインにあるツール バーの [MSDTC] ボタンをクリックし、ローカル コーディネータを使用する MSDTC を構成することができます。今回はこれ以上の実行ができないため、サーバー プロセスは終了しています。

このところ、特に Microsoft Visual Studio .NET Version 2003 をインストールしていたり、TV チューナー系のハードウェアを使えるようにしたり使えないようにしたりなど、システム周りの変更をいじっていたためにおかしくなってしまったのかと思いつつ…。

ともあれ説明の中に記されていたコンポーネントサービス MMC スナップ印にある [MSDTC] ツールバーというものも見つからずに困っていたのですけど、イベントビュアのそれより少し下あたりに、一つ気になるログが残っていました。

 

MS DTC サービスを実行しているアカウントが無効です。 これは、サービスのアカウント情報が Microsoft 管理コンソール (MMC) のサービス スナップインを使用して変更された場合に起こります。 MS DTC サービスは開始作業を続行します。MS DTC サービスのアカウント情報が、コンポーネント サービス エクスプローラを使用して更新されていることを確認してください。

ソースは "MSDTC"、すなわち "Distributed Transaction Coordinator (分散トランザクションコーディネータ)" でした。

 

これから察するに、MS DTC サービスを起動する際のアカウントが変更されてしまったのかもしれないですね。

さっそく 「サービス」 の項目を確認して、"Distributed Transaction Coordinator" のプロパティからログオンアカウントの内容を確認してみると、"ローカル システム アカウント" として設定されていました。

ローカルシステムアカウントが一番設定しやすくて、それ以外は特定のアカウントを指定しないといけないため、なおさら調整がしにくかったのですけど、幸いにも正常にコンポーネントサービスを参照できる Windows XP Professional パソコンが他にもあったのでそちらも確認してみると、そちらは "NT AUTHORITY\NetworkService" というアカウントが設定されていました。

 

ローカルシステムアカウントというのはその PC の内だけで何かをする役目を持ったアカウント、ネットワークサービスアカウントというのはその PC が外部ネットワークとやりとりをする役目をもったアカウント、と個人的には認識しています。

これだと、もしかすると "ローカルシステムアカウント" では不足するコンポーネントがインストールされていたりとかするのかもしれないですね。ローカルシステムアカウントに戻すのは簡単なので、とりあえず起動アカウントを調整してみることにしました。

 

アカウントを NETWORK SERVICE に変更してみる

ローカルシステムアカウント以外は、アカウントと一緒にパスワードも設定しないといけないのが気になるところですけど、ともあれサービスを起動するアカウントを "NT AUTHORITY\NetworkService" に変更してみることにしました。

「コントロールパネル」 の 「サービス」 から "Distoributed Transaction Coordinator" のプロパティを表示します。そして 【ログオン】 タブを選択して、ログオンアカウントを調整します。

 

"ローカルシステムアカウント" ではなく "アカウント" を選択します。そして 「参照」 ボタンを押して "NETWORK SERVICE" アカウントを選択しました。選択してみるとアカウントのところには "NT AUTHORITY\NetworkService" と表示されました。

そして肝心のパスワードの部分ですけど、はじめから埋まっていた "********************" のままではダメでしたけど、それを削除して空のパスワードにしてみたところ、問題なくパスすることができました。

 

そしてサービスを再起動した後、いよいよ "コンポーネントサービス " を開いてみると、今度はしっかりと "COM+ アプリケーション" の一覧が正常に表示されるようになりました。イベントビュアに何かエラーが表示されることもなくて良い感じです。

ただし、アカウントはネットワークサービスよりもローカルアカウントの方がセキュリティの面では安全なのでしょうから 、そのあたりは気にしておいた方が良いかもしれないです。何らかの意図でそうなっているとしたら OS を危険にさらすことも考えられますからね。