Los parámetros para los servicios creados tienen algunos problemas de formateo peculiares, en particular si el comando incluye espacios o comillas:
Si desea ingresar parámetros de línea de comando para el servicio, debe encerrar la línea de comando completa entre comillas. (Y siempre deje un espacio después binPath=
y antes de la primera cita, como señaló mrswadge)
Entonces, para crear un servicio para el comando PATH\COMMAND.EXE --param1=xyz
, usaría el siguiente parámetro binPath:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Si la ruta al ejecutable contiene espacios , debe encerrar la ruta entre comillas.
Así que por un comando que tiene dos parámetros y un camino con espacios, necesita comillas anidadas . Tienes que escapar de las comillas internas con barras invertidas \". Lo mismo ocurre si los parámetros en sí contienen comillas, también deberá escapar de ellos.
A pesar de utilizar las barras diagonales inversas como caracteres de escape, no tiene que escapar de las barras diagonales inversas normales contenidas en la ruta. Esto es contrario a la forma en que normalmente utiliza barras invertidas como caracteres de escape.
Entonces, para un comando como
"PATH WITH SPACES \COMMAND.EXE" --param-with-quotes="a b c" --param2
:
binPath= "\"PATH WITH SPACES \COMMAND.EXE\" --param-with-quotes=\"a b c\" --param2"
^ ^ ^ ^ ^ ^ ^
| | | | | | |
opening escaped regular escaped escaped closing
quote quote backslash closing quotes quote
for for in quote for for
whole path path for path parameter whole
command command
Aquí hay un ejemplo concreto de la documentación de SVNserve, que muestra todos los casos especiales:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(se agregan saltos de línea para facilitar la lectura, no los incluya)
Esto agregaría un nuevo servicio con la línea de comando "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Entonces en resumen
- espacio después de cada parámetro sc:
binpath=_
, displayname=_
ydepend=_
- cada parámetro sc que contiene espacios debe estar entre comillas
- todas las citas adicionales dentro del binpath se escapan con barras invertidas: \"
- todas las barras invertidas dentro del binpath no se escapan
binPath= "c:\abc\def.exe /Param1=ghi"
parece la idea correcta. ¿Deben escaparse las barras invertidas (es decir, "c: \\ abc \\ ...")? Lo peor, puede editar directamente el valor del Registro después si SC.EXE no puede hacerlo.