Я спізнююсь, але хотів би додати альтернативу, яка може виглядати дивно, але я не бачив іншого способу:
Коли я щовечора встановлюю свої послуги Windows у процесі CI, мені потрібно було щось, що працює весь час і повністю автоматизоване. Чомусь після видалення їх служби завжди позначалися для видалення (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 хвилин).