Oluşturulan hizmetler için parametrelerde, özellikle komutta boşluk veya tırnak varsa, bazı özel biçimlendirme sorunları vardır:
Hizmet için komut satırı parametreleri girmek istiyorsanız , tüm komut satırını tırnak içine almanız gerekir . (Ve binPath=
mrswadge'ın işaret ettiği gibi, ilk alıntıdan önce ve önce bir boşluk bırakın )
Bu nedenle, komut için bir hizmet oluşturmak PATH\COMMAND.EXE --param1=xyz
için aşağıdaki binPath parametresini kullanırsınız:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Eğer yol yürütülebilir boşluk içeriyorsa , sen içine zorunda yolunu tırnak içinde.
Olan bir komut için Yani hem parametreleri ve boşluk içeren bir yol, size gereken yuvalanmış tırnak . Ters eğik çizgiler ile iç tırnak kaçmak zorunda \". Aynı şey parametrelerin kendisinde tırnak işareti içeriyorsa, bunlardan da kaçmanız gerekir.
Ters eğik çizgileri kaçış karakteri olarak kullanmanıza rağmen, yoldaki normal ters eğik çizgilerden kaçmak zorunda değilsiniz. Bu normalde ters eğik çizgileri kaçış karakteri olarak nasıl kullandığınıza aykırıdır.
Yani aşağıdaki gibi bir komut için
"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
İşte tüm özel durumları gösteren SVNserve belgelerinden somut bir örnek:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(satır aralıkları okunabilirlik için eklenir, bunları dahil etmeyin)
Bu, komut satırına yeni bir hizmet ekler "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Özet olarak
- Her sc parametre sonra alanı:
binpath=_
, displayname=_
vedepend=_
- boşluk içeren her sc parametresi tırnak işaretleri içine alınmalıdır
- binathath içindeki tüm ek tırnak işaretleri ters eğik çizgilerle kaçar: \"
- binathath içindeki tüm ters eğik çizgiler kaçmaz
binPath= "c:\abc\def.exe /Param1=ghi"
doğru fikir gibi görünür. Ters eğik çizgilerden kaçınılması gerekiyor mu (yani "c: \\ abc \\ ...")? En kötü şey, SC.EXE bunu yapamazsa, daha sonra doğrudan Kayıt Defteri değerini düzenleyebilirsiniz.