システムに実行可能ファイルが残っていないときにWindowsサービスをアンインストールするにはどうすればよいですか?システムに実行可能ファイルが残っていないため、installutil -u
を実行できません。サービスコンソールにサービスのエントリがまだ表示されています。
この状態の理由はおそらく、msiパッケージに問題があり、サービスが正しく削除されないためですが、サービスがこの状態になったらどうすれば修正できますか?
「管理者」コマンドプロンプトで次を実行することにより、sc.exe(Windowsリソースキットに含まれていると思います)を使用してアンインストールできます。
sc.exe delete <service name>
ここで、<service name>
は、exeではなく、サービス管理コンソールで表示されるサービス自体の名前です。
Sc.exeはSystemフォルダにあり、実行するには管理者権限が必要です。 このMicrosoft KB記事の詳細 。
または、 DeleteService() apiを直接呼び出すことができます。 OpenSCManager() などを介してサービスコントロールマネージャーへのハンドルを取得する必要があるため、この方法はもう少し複雑ですが、一方で、何が起こっているかをより細かく制御できます。
レジストリ経由でWindowsサービスを削除
正しいパスを知っていれば、レジストリからサービスを簡単に削除できます。ここに私がそれをした方法があります:
実行RegeditまたはRegedt32
レジストリエントリ「HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services」に移動します
削除するサービスを探して削除します。キーを調べて、サービスが使用しているファイルを確認し、必要に応じてそれらを削除することもできます。
コマンドウィンドウを介してWindowsサービスを削除
または、コマンドプロンプトを使用して、次のコマンドを使用してサービスを削除することもできます。
sc delete
次のコマンドを使用してサービスを作成することもできます
sc create "MorganTechService" binpath = "C:\ Program Files\MorganTechSPace\myservice.exe"
注:サービスマネージャーでリストを更新するには、システムを再起動する必要がある場合があります。
私はWindows XPで試しましたが、うまくいきました
ローカルコンピューター:sc \\。 [サービス名]を削除します
Deleting services in Windows Server 2003
We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.
To delete a service:
Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.
Enter command:
sc servername delete servicename
For instance, sc \\dc delete myservice
(Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)
Below is the official help of all sc functions:
DESCRIPTION:
SC is a command line program used for communicating with the
NT Service Controller and services.
USAGE:
sc
これを行うための私のお気に入りの方法は、 Sysinternals Autoruns applicationを使用することです。サービスを選択して[削除]を押すだけです。
サービスを削除するPowerShellスクリプトは次のとおりですfoo
$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
同じサービスの実行可能ファイルのコピーを作成し、既存のサービスの同じパスに貼り付けてからアンインストールします。
これにはPowerShellを使用します
Remove-Service -Name "TestService"
https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.management/remove-service