Iniciar un servicio que puede tener conflictos de puertos con el servicio existente

0

¿Hay alguna forma de iniciar un servicio y forzar que un servicio que ya se está ejecutando se detenga si usa el puerto que usará el servicio que quiero iniciar?

Voy a instalar apache y mysql, y quiero que los servicios se ejecuten sin tener que detener manualmente los servicios existentes que usan el puerto 80/3306, como los servicios apache / mysql existentes.

Estoy usando NSIS para hacer mi instalador.

Miguel
fuente

Respuestas:

1

Hice abortar mi instalador si descubría que los puertos 80 o 3306 estaban en uso.

Utilicé un complemento TCP para NSIS, http://nsis.sourceforge.net/TCP_plug-in

Lo usé de esta manera,

...
TCP::CheckPort "80"
Pop $0
StrCmp $0 "free" port_ok
StrCmp $0 "socket_error" socket_error
StrCmp $0 "inuse" socket_inuse
Goto port_ok
socket_inuse:
    MessageBox MB_OK "Port 80 is in use by another application."
    Abort
socket_error:
    MessageBox MB_OK "Error connecting to port 80"
    Abort
port_ok:
...
Miguel
fuente
+1. Es mejor abortar e informar al usuario por qué, en lugar de detener los servicios existentes. Si uno le hiciera eso a un servidor mío, tendría un ajuste franco-canadiense.
Patrick Seymour