Cómo iniciar un servicio con ciertos parámetros de inicio en Windows

17

¿Cómo inicio un servicio con ciertos parámetros? En otra pregunta que he encontrado

net start servicename bla

pero si intento esto, me netarroja un error de sintaxis.

¿Qué estoy haciendo mal?

Editar: para aclararnet start servicenamefunciona bien, pero necesito pasar parámetros al servicio. Puedo hacer esto manualmenteservices.mscal completar un parámetro de inicio antes de comenzar el servicio. Pero, ¿cómo puedo hacer esto desde un script?

Otra edición: Lo siento, pero mi pregunta fue engañosa . En mis pruebas, tuve muchos más parámetros y no son las/blah net startquejas. De hecho, cualquier cosa que comience con una barra está bien . Entoncesnet start servicename /blahfunciona,net start servicename blahno funciona. Como lo necesitonet start servicename /foo bar,barese es el problema.

sbi
fuente

Respuestas:

29
sc iniciar fooservice arg1 arg2 ...
usuario1686
fuente
No tengo idea de cómo logré perder su respuesta en ese momento, pero ciertamente estoy muy contento de haberla encontrado ahora (por accidente). Esto funciona de maravilla, incluso con parámetros que no comienzan /. ¡Muchas gracias!
sbi
Es 2018 y ni "sc start ..." ni "net start ..." parecen funcionar en Windows 10. La edición del registro funciona serverfault.com/questions/507561/…
MarcH
8

NET STARTno le permitirá pasar parámetros arbitrarios hasta donde yo sé (parece que tienen que tener el prefijo con un /), creo que la forma correcta es modificar la clave de registro adecuada y detener / iniciar el servicio. Asumiendo que su servicio personalizado se llama MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

Realmente, sin embargo, una mejor manera es almacenar su configuración en algún lugar que el servicio conozca, como quizás el registro o el sistema de archivos, y leer los valores que necesite. Como puede ver, personalizar la línea de comandos es un poco más doloroso de lo que debería ser.

Si por casualidad se trata de un servicio desarrollado por .NET, puede crear n copias del archivo ejecutable en su sistema de archivos y hacer que cada uno obtenga automáticamente los parámetros del archivo app.config apropiado.

Parece que te has alejado demasiado del cuadro Win32. Dado que esto suena como un desarrollo personalizado, cualquiera de las otras soluciones ofrecidas, aunque quizás no sea su ideal, funcionará correctamente y es una forma más segura de hacerlo.

Goyuix
fuente
Ugh El servicio toma un archivo de configuración. Utiliza un nombre de archivo predeterminado o se le pasa uno. Como necesito dos instancias diferentes del servicio en ejecución, necesito apuntarlas a diferentes archivos de configuración. Tener que jugar con el registro parece un truco muy feo. ¿Realmente no hay otra manera que eso (y la GUI)?
sbi
Goyuix, mira mi pregunta editada. net start no aceptar parámetros, pero sólo los que se inician con una /.
sbi
Goyuix, ahora lo uso sc.exe. Vea la respuesta de Grawity (que de alguna manera logré perder en ese entonces).
sbi
4

Necesita una barra inclinada antes de cada parámetro cuando se usa net start. También asegúrese de citar los parámetros que tienen espacios.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
Incluso Mien
fuente
Mira de nuevo mi problema. Tengo parámetros que (tienen que) comenzar con una barra también. ¿Cómo pasaría eso entonces?
sbi
Pruebe esto: net start servicename / "/ foo" / bar
Even Mien
3

net start servicename /foo por un solo argumento

net start servicename /"foo bar" para una cadena o lista de argumentos

Nota : Esta pregunta tiene 8 años, pero no tengo la reputación de comentar sobre la respuesta aceptada y este sigue siendo un resultado importante de Google en 2018, por lo que quería aclarar qué funcionaba ahora con respecto a la edición final de las preguntas.

MissingL_tter
fuente
Nota: Le di un voto a favor, así que ahora su respuesta está en la 4ª posición, y obtuvo un aumento de repetición. Diviértete aquí! :-)
sbi
1

Debe usar el nombre real del servicio tal como aparece en el panel de control, servicios. Si contiene espacios, debe poner comillas alrededor del nombre del servicio.

Para obtener el nombre real del servicio, simplemente escriba net startsin ningún parámetro en el símbolo del sistema. Debería darle una lista de todos los servicios en ejecución para que pueda obtener el nombre real del servicio. Entonces solo usanet start <servicename>

Robert Williams
fuente
Robert, es un servicio mío que instalo y luego comienzo en un script. Estoy net start "my-service-name"bien Es lo net start "my-service-name" /blahque me da un mensaje de error. También lo he intentado net start "my-service-name" -blahy esto también es un error de sintaxis.
sbi
0

¿Podrían InstSrv y SrvAny ayudar en esto? Guía y enlaces

Dave M
fuente
Lo he mirado brevemente y no lo creo. (Corríjame si me equivoco). Tengo un servicio real ejecutable y funcionando muy bien. Es solo que (para las pruebas) necesito instalarlo e iniciarlo desde un script, y necesito pasar parámetros al servicio.
sbi