I parametri per i servizi creati presentano alcuni problemi di formattazione particolari, in particolare se il comando include spazi o virgolette:
Se si desidera immettere i parametri della riga di comando per il servizio, è necessario racchiudere l' intera riga di comando tra virgolette. (E lascia sempre uno spazio dopo binPath=
e prima della prima citazione, come ha sottolineato mrswadge)
Quindi, per creare un servizio per il comando PATH\COMMAND.EXE --param1=xyz
è necessario utilizzare il seguente parametro binPath:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Se il percorso del file eseguibile contiene spazi , è necessario racchiudere il percorso tra virgolette.
Quindi, per un comando che ha entrambi i parametri e un percorso con spazi, sono necessarie le virgolette nidificate . Devi sfuggire alle virgolette interne con barre rovesciate \". Lo stesso vale se i parametri stessi contengono virgolette, sarà necessario sfuggire anche a quelli.
Nonostante si utilizzino le barre rovesciate come caratteri di escape, non è necessario sfuggire alle barre rovesciate normali contenute nel percorso. Questo è in contrasto con il modo in cui normalmente usi le barre rovesciate come caratteri di escape.
Quindi per un comando come
"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
Ecco un esempio concreto dalla documentazione di SVNserve, che mostra tutti i casi speciali:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(le interruzioni di riga vengono aggiunte per la leggibilità, non includerle)
Ciò aggiungerebbe un nuovo servizio con la riga di comando "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Quindi in sintesi
- spazio dopo ogni parametro SC:
binpath=_
, displayname=_
edepend=_
- ogni parametro sc che contiene spazi deve essere racchiuso tra virgolette
- tutte le virgolette aggiuntive all'interno del binpath sono salvate con barre rovesciate: \"
- tutte le barre rovesciate all'interno del binpath non vengono salvate
binPath= "c:\abc\def.exe /Param1=ghi"
sembra l'idea giusta. Le barre rovesciate devono essere sfuggite (ad es. "C: \\ abc \\ ...")? Peggio ancora, potresti modificare direttamente il valore del Registro di sistema in seguito se SC.EXE non può farlo.