アンインストールに失敗して残ったサービスのエントリを消去したい

対象プラットフォーム

質問

現在、Windows 2000 Serverを管理しています。

先日あるアプリケーションのアンインストールを行なったのですが、失敗してしまい、[サービス] アプレットにエントリがそのまま残ってしまいました。
何とか消したいと思い、レジストリを調査したところ、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 以下にそれらしいキーがあるのですが、単純にこれを削除すればよいのでしょうか?

回答

たしかに、サービスエントリの実体は HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 以下のレジストリそのものですので、適切なエントリを消去することでサービスのエントリを削除することは可能です。


図1: [サービス] アプレットでみたサービスと、対応するレジストリエントリの例

各キー中に存在する標準的な値についての説明が、

にありますので、これらの値を直接修正することで、エントリの内容を修正することなども可能です。

しかし、直接レジストリを修正、削除する方法は、失敗した場合の危険性が大きいことに加え、どのエントリを削除すべきかは自分で各キーの DisplayName の値と [サービス] アプレット中の「名前」とを対照して探していくしかないため、手間もかかります。レジストリを直接修正するのは最後の手段だと考えておいた方がよいでしょう。

サービスを制御する sc.exe

実は、Windows 2000 のリソースキットに同梱されている sc.exe を利用することで、これらの操作をコマンドラインから安全に行なうことが可能です。実際にサービスの作成と削除を行なった際の画面を図xx2に示します。


図2: sc.exeを利用したサービスの作成と削除
サービス名は「test」としている。
なお実際に機能するサービスを作成する際は、
最終的にさまざまなオプションの設定が必要である。
詳細はsc.exeのヘルプなどを参照のこと。

このように、「sc.exe delete [ サービス名]」というコマンドを発行することで、サービスのエントリ削除が可能になっています。

Windows XPではsc.exeが標準添付に

Windows 2000では、sc.exeはリソースキットのツールだった為、サポートを受ける場合は自分でWin32 APIを利用してsc.exeと同機能のツールを作成する必要がありました。しかし、Windows XPではsc.exeが標準でインストールされるようになっています。これにより、サポート面でも安心して利用できるようになりました。

注記・補足

  1. 本文書は、日経 Windowsプロ 2002 年 2 月号の「トラブル解決 Q&A コーナー」に掲載された「アンインストールに失敗して残ったサービスのエントリを消去したい」の草稿を筆者の方で HTML 化して掲載しているものです。

Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2002-12-04 23:41:29 JST
webmaster@monyo.com