Tôi đến trễ, nhưng muốn thêm một giải pháp thay thế, có thể trông lạ, nhưng tôi không thấy một cách khác:
Khi tôi cài đặt Dịch vụ Windows của mình trong quy trình CI mỗi tối, tôi cần thứ gì đó hoạt động mọi lúc và hoàn toàn tự động. Vì một số lý do, các dịch vụ luôn được đánh dấu để xóa trong một thời gian dài (5 phút trở lên) sau khi gỡ cài đặt chúng. Do đó, tôi đã mở rộng tập lệnh bó cài đặt lại để đảm bảo rằng dịch vụ thực sự bị xóa (phiên bản đơn giản hóa):
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
Những gì tôi có thể thấy, là dịch vụ được đánh dấu để xóa trong khoảng 5 phút (!) Cho đến khi cuối cùng nó đi qua. Cuối cùng, tôi không cần thêm bất kỳ sự can thiệp thủ công nào. Tôi sẽ mở rộng kịch bản trong tương lai để có điều gì đó xảy ra sau một thời gian nhất định (ví dụ: thông báo sau 30 phút).