Параметри створених служб мають деякі особливості формування формату, зокрема, якщо команда включає пробіли або лапки:
Якщо ви хочете ввести параметри командного рядка для послуги, вам слід укласти в лапки цілий командний рядок . (І завжди залишайте пробіл після binPath=
та перед першою цитатою, як вказував mrswadge)
Отже, для створення служби для команди PATH\COMMAND.EXE --param1=xyz
ви використовували б такий параметр binPath:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Якщо шлях до виконуваного файлу містить пробіли , вам слід вкласти шлях у лапки.
Отже, для команди, яка має і параметри, і шлях з пробілами, вам потрібні вкладені лапки . Вам доведеться уникати внутрішніх цитат за допомогою зворотних нахилів \". Те саме стосується, якщо самі параметри містять лапки, вам також потрібно буде уникнути цих.
Незважаючи на використання косої косої риси в якості символів для втечі, вам не доведеться уникати звичайних косих косих рисок, що містяться в шляху. Це суперечить тому, як ви зазвичай використовуєте звороту косу рису як символи втечі.
Отже для такої команди, як
"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
Ось конкретний приклад із документації на SVNserve, де показані всі особливі випадки:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(рядкові перерви додаються для читання, не включайте їх)
Це додало б нову службу з командним рядком "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Отже, підсумовуючи
- пробіл після кожного параметра SC:
binpath=_
, displayname=_
іdepend=_
- кожен параметр sc, який містить пробіли, повинен бути укладений у лапки
- всі додаткові котирування всередині binpath вилучені із зворотним нахилом: \"
- всі нахили від косого кута всередині пробігу не уникнуть
binPath= "c:\abc\def.exe /Param1=ghi"
здається правильною ідеєю. Чи потрібно відхиляти кососуші риски (тобто "c: \\ abc \\ ...")? Найгірше, що ви можете безпосередньо змінити значення Реєстру після цього, якщо SC.EXE не може цього зробити.