CMDまたはPowerShellを使用してWindowsサービスを削除する方法

不要になったプログラムやツールをアンインストールしても、残ったサービスがWindowsに残っていることがあります。場合によっては、無効になっているだけでレジストリに残っていることもあります。問題を引き起こしたり、サービスリストを乱雑にしたりしない限り、それほど大きな問題にはなりません。適切に削除できた時は妙な満足感がありますが、必ずしも簡単ではありません。コマンドやレジストリ編集を駆使して手を動かす必要があり、注意しないとシステムに悪影響を与える可能性があります。このガイドでは、CMD、PowerShell、レジストリ調整などのWindows組み込みツールを使って、頑固なサービスを完全に削除する方法を詳しく説明します。完全に削除する前に、まずサービスを無効にして、それで十分かどうか確認することをお勧めします。ある環境では再起動後にうまくいきましたが、別の環境ではレジストリキーをいくつか調べなければなりませんでした。もちろん、Windowsは必要以上に複雑にしています。しかし、サイレントモードで使用されていないサービスを削除する方法を知っていれば、システムリソースを節約し、システム全体を整理することができます。そうですね、注意してください。間違ったサービスを削除すると、問題が発生する可能性があります。大きな変更を加える前に、必ずレジストリや設定をバックアップしてください。

Windowsサービスを適切に削除する方法

修正1: サービスを無効にして依存関係を確認する

これが最も安全な方法です。まずサービスを無効化することで、予期せぬシステムトラブルを回避できます。不要なサービスの場合は、自動起動をブロックし、一時的に停止することで、後で削除しても問題ないことを確認できます。PowerShellを使用してください。例えば、stunnelというサービスを無効にするには、次のようにします。

Set-Service stunnel -StartupType Disabled

そしてすぐにそれを止めます:

Stop-Service stunnel

これにより、停止するサービスが問題を引き起こしているのか、それとも本当に使われていないのかを確認できます。一部のマシンでは、この方法により、再起動後にサービスが再起動できなくなる場合もあります。削除する前に、そのサービスに依存している他のサービスを確認してください。依存関係のあるサービスを削除するのは、必ずしも良い考えとは限りません。

Get-Service stunnel -DependentServices

これはstunnelに依存するもののリストを返します。依存関係がある場合は、まずそれらを無効にするか再設定することをお勧めします。

修正2: 削除前にサービスを停止する

安全だと確信できたら、プロセスの実行を防ぐためにサービスを完全に停止します。これは、サービスGUIでサービスを選択し、「停止」または「実行」をクリックすることで実行できます。

net stop stunnel

このコマンドは簡単で、コマンドプロンプトで動作します。重要なのは、まずサービスを停止することです。Windowsでは実行中のサービスを削除できません。停止したら、サービスエントリそのものの削除に進みます。

修正3: レジストリ設定をバックアップする

サービスは基本的にレジストリエントリであるため、削除する前に現在の設定をエクスポートすることをお勧めします。レジストリエディター(regedit )でHKLM\SYSTEM\CurrentControlSet\Servicesに移動するか、次のコマンドを使用します。

reg export "HKLM\SYSTEM\CurrentControlSet\Services\stunnel" "%HOMEPATH%\Documents\stunnel_backup.reg" /y

これにより、万が一に備えてドキュメントフォルダにバックアップファイルが作成されます。何か問題が発生した場合でも、すぐに復元できます。

修正4: サービスを削除する

次に、sc.exeを使用してサービスを削除します。

sc delete stunnel

サービス名にスペースが含まれている場合は、必ず引用符で囲んでください(例: [SC] DeleteService SUCCESS)sc delete "My Service" 。成功すると、「[SC] DeleteService SUCCESS」と表示されます。ただし、Windows に「サービスは削除対象としてマークされています」のようなメッセージが表示される場合があります。これは、サービスが削除予定であることを示していますが、再起動するか、ハンドルを手動で閉じる必要がある可能性があります。

あるいは、これをリモートで実行するには(たとえば、サービスが別のマシン上にある場合)、次のコマンドを実行します。

sc \\m-fs01 stop ServiceName1 sc \\m-fs01 delete ServiceName1

これは、適切な権限があり、リモート アクセスが有効になっていることを前提としています。

修正5: PowerShellとWMIを使用する(sc.exeでは不十分な場合)

PowerShellは一歩先を行きます。PowerShell Core(バージョン6以降)を使用している場合は、Remove-Serviceを使用できます。

Remove-Service stunnel

しかし、Windows PowerShell 5.1ではそれがないため、WMIを使用する必要があります。方法は次のとおりです。

$service = Get-WmiObject -Class Win32_Service -Filter "Name='stunnel'" $service. Uninstall()

2行目はちょっと扱いにくいかもしれませんが、代替手段としては十分です。ただし、サービスがなかなか消えない場合は、レジストリキーを直接削除する必要がある場合もあります。

Remove-Item "HKLM:\SYSTEM\CurrentControlSet\Services\stunnel" -Recurse -Force

これにより、サービスが完全に削除されます。削除する前に、レジストリのDisplayNameImagePathを必ず確認してください。誤って間違った項目を削除してしまうような事態は避けてください。

削除後は、Windowsの再起動を忘れないでください。システムが更新されていないために、サービスがまだリストに表示されている場合があります。再度ログインしたら、services.mscでサービスが本当に消えているかどうかを確認してください。また、必要に応じてプログラムファイルと実行ファイルをクリーンアップしてください。

CMDまたはPowerShellで削除すると、サービスが「削除対象」としてマークされ、再起動するまでそのままになることがあります。そのような場合は、プロセスを強制的に削除するtaskkill /F /PIDか、タスクマネージャーでプロセスを終了させて​​からレジストリキーを削除すると、クリーンアップが高速化される可能性があります。