Les paramètres des services créés ont des problèmes de formatage particuliers, notamment si la commande comporte des espaces ou des guillemets :
Si vous voulez entrer paramètres de ligne de commande pour le service, vous devez joindre le ligne de commande complète entre guillemets. (Et laissez toujours un espace après binPath=
et avant la première citation, comme l'a souligné mrswadge)
Donc, pour créer un service pour la commande PATH\COMMAND.EXE --param1=xyz
vous devez utiliser le paramètre binPath suivant :
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Si le chemin à l'exécutable contient des espaces vous devez joindre le chemin entre guillemets.
Donc pour une commande qui a les deux paramètres y un chemin avec des espaces, vous devez citations emboîtées . Vous devez échapper aux guillemets internes avec des antislashes. \" . Il en va de même si les paramètres eux-mêmes contiennent des guillemets, vous devrez également les échapper.
Bien que les barres obliques inverses soient utilisées comme caractères d'échappement, il n'est pas nécessaire d'échapper aux barres obliques inverses ordinaires contenues dans le chemin. Ceci est contraire à la façon dont vous utilisez normalement les barres obliques inversées comme caractères d'échappement.
Ainsi, 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 tiré de la documentation de 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 la 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"
.
En résumé
- espace après chaque paramètre sc :
binpath=_
, displayname=_
y depend=_
- chaque paramètre sc qui contient des espaces doit être mis entre guillemets
- tous les guillemets supplémentaires à l'intérieur du binpath sont échappés avec des backslashes : \"
- tous les antislashs à l'intérieur du binpath ne sont pas échappés
0 votes
Un coup d'œil à la clé Services dans le Registre suggère que tous les paramètres nécessaires sont inclus dans la valeur ImagePath, de sorte que votre fichier
binPath= "c:\abc\def.exe /Param1=ghi"
semble être la bonne idée. Les barres obliques inversées doivent-elles être échappées (par exemple, "c : \\abc\\... ") ? Le pire, c'est que vous pouvez modifier directement la valeur du registre après coup si SC.EXE ne peut pas le faire.1 votes
J'ai renoncé à sc.exe et j'utilise installutil.exe comme suit : Installutil.exe /ServiceName="TheName" /targetdir=" C:\TheInstallDirectory\ " /PackageRoot="PackageRootPath"
0 votes
J'ai utilisé Installutil.exe et pour les technologies plus anciennes, j'utilise Instsrv.exe de Windows XP/2003 Resource Ket.