Solución:
sc create <servicename> binpath= "<pathtobinaryexecutable>" [option1] [option2] [optionN]
El truco consiste en dejar un espacio después de = en su declaración de creación, y también usar “” para cualquier cosa que contenga caracteres especiales o espacios.
Es aconsejable especificar un Nombre para mostrar para el servicio, así como establecer la configuración de inicio en automático para que se inicie automáticamente. Puede hacer esto especificando DisplayName= yourdisplayname
y start= auto
en su declaración de creación.
Aquí hay un ejemplo:
C:Documents and SettingsAdministrator> sc create asperacentral
binPath= "C:Program FilesAsperaEnterprise ServerbinDebugasperacentral.exe"
DisplayName= "Aspera Central"
start= auto
Si esto funcionó, debería ver:
[SC] CreateService SUCCESS
ACTUALIZACIÓN 1
http://support.microsoft.com/kb/251192
Los parámetros para los servicios creados tienen algunos problemas de formato peculiares, en particular si el comando incluye espacios o comillas:
Si quieres entrar parámetros de línea de comando para el servicio, debe adjuntar el línea de comando completa entre comillas. (Y siempre deja un espacio después binPath=
y antes de la primera cita, como señaló mrswadge)
Entonces, para crear un servicio para el comando PATHCOMMAND.EXE --param1=xyz
usaría el siguiente parámetro binPath:
binPath= "PATHCOMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Si el sendero al ejecutable contiene espacios, tienes que adjuntar el sendero entre comillas.
Entonces, para un comando que tiene ambas cosas parámetros y un camino con espacios, necesitas citas anidadas. Tienes que escapar de las comillas internas con barras invertidas. ". Lo mismo se aplica si los propios parámetros contienen comillas, también deberá escapar de ellas.
A pesar de usar barras invertidas como caracteres de escape, no tiene que escapar de las barras invertidas regulares que se encuentran en la ruta. Esto es contrario a cómo normalmente usa 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 FilesCollabNet Subversion Serversvnserve.exe" --service -r "C:my repositories" "
displayname= "Subversion Server" depend= Tcpip start= auto
(los saltos de línea se agregan para facilitar la lectura, no los incluya)
Esto agregaría un nuevo servicio con la línea de comando "C:Program FilesCollabNet Subversion Serversvnserve.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 comillas adicionales dentro del binpath se escapan con barras invertidas: "
- todas las barras diagonales invertidas dentro del binpath no se escapan
sc create "YOURSERVICENAME" binpath= ""C:Program Files (x86)Microsoft SQL ServerMSSQL11MSSQLBinnsqlservr.exe" -sOPTIONALSWITCH" start= auto
Vea aquí: Modificación de la “Ruta al ejecutable” de un servicio de Windows