Les paramètres des services créés présentent des problèmes de format particuliers, en particulier si la commande comprend des espaces ou des guillemets:
Si vous souhaitez entrer des paramètres de ligne de commande pour le service, vous devez mettre toute la ligne de commande entre guillemets. (Et laissez toujours un espace après binPath=
et avant la première citation, comme l'a souligné mrswadge)
Ainsi, pour créer un service pour la commande, PATH\COMMAND.EXE --param1=xyz
vous utiliseriez le paramètre binPath suivant:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Si le chemin d' accès à l'exécutable contient des espaces , vous devez mettre le chemin entre guillemets.
Donc, pour une commande qui a à la fois des paramètres et un chemin avec des espaces, vous avez besoin de guillemets imbriqués . Vous devez échapper les guillemets intérieurs avec des barres obliques inverses \". Il en va de même si les paramètres eux-mêmes contiennent des guillemets, vous devrez également les échapper.
Malgré l'utilisation de barres obliques inverses comme caractères d'échappement, vous n'avez pas besoin d'échapper aux barres obliques inverses régulières contenues dans le chemin. Ceci est contraire à la façon dont vous utilisez normalement des barres obliques inverses comme caractères d'échappement.
Donc pour une commande comme
"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
Voici un exemple concret de la documentation SVNserve, qui montre tous les cas particuliers:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(les sauts de ligne sont ajoutés pour plus de lisibilité, ne les incluez pas)
Cela ajouterait un nouveau service avec la ligne de commande "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Donc en résumé
- espace après chaque paramètre sc:
binpath=_
, displayname=_
etdepend=_
- chaque paramètre sc contenant des espaces doit être placé entre guillemets
- tous les guillemets supplémentaires à l'intérieur du binpath sont échappés avec des barres obliques inverses: \"
- tous les backslashes dans le binpath ne sont pas échappés
binPath= "c:\abc\def.exe /Param1=ghi"
semblez être la bonne idée. Les barres obliques inverses doivent-elles être échappées (par exemple "c: \\ abc \\ ...")? Pire encore, vous pouvez modifier directement la valeur du registre par la suite si SC.EXE ne peut pas le faire.