遅くなりましたが、奇妙に見えるかもしれない代替案を追加したいと思いますが、別の方法が見つかりませんでした:
毎晩 CI プロセスで Windows サービスをインストールするので、常に機能し、完全に自動化されたものが必要でした。何らかの理由で、サービスをアンインストールした後、サービスは常に長時間 (5 分以上) 削除対象としてマークされていました。したがって、再インストール バッチ スクリプトを拡張して、サービスが実際に削除されていることを確認します (簡易版)。
REM Stop the service first
net stop My-Socket-Server
REM Same as installutil.exe, just implemented in the service
My.Socket.Server.exe /u
:loop1
REM Easy way to wait for 5 seconds
ping 192.0.2.2 -n 1 -w 5000 > nul
sc delete My-Socket-Server
echo %date% %time%: Trying to delete service.
if errorlevel 1072 goto :loop1
REM Just for output purposes, typically I get that the service does not exist
sc query My-Socket-Server
REM Installing the new service, same as installutil.exe but in code
My.Socket.Server.exe /i
REM Start the new service
net start My-Socket-Server
私が見ることができるのは、サービスが最終的に処理されるまでの約 5 分間 (!) 削除対象としてマークされていることです。最後に、手動による介入はもう必要ありません。将来、スクリプトを拡張して、一定時間後に何かが起こるようにします (例: 30 分後に通知)。