Parameter untuk layanan yang dibuat memiliki beberapa masalah pembentukan khusus, khususnya jika perintah termasuk spasi atau kutipan:
Jika Anda ingin memasukkan parameter baris perintah untuk layanan, Anda harus menyertakan seluruh baris perintah dalam tanda kutip. (Dan selalu meninggalkan tempat setelah binPath=
dan sebelum kutipan pertama, seperti yang ditunjukkan mrswadge)
Jadi, untuk membuat layanan untuk perintah PATH\COMMAND.EXE --param1=xyz
Anda akan menggunakan parameter binPath berikut:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Jika path ke executable berisi spasi , Anda harus menyertakan path dalam tanda kutip.
Jadi untuk sebuah perintah yang memiliki kedua parameter dan jalan dengan spasi, Anda perlu tanda kutip bersarang . Anda harus melarikan diri dari kutipan batin dengan garis miring terbalik \". Hal yang sama berlaku jika parameter itu sendiri mengandung tanda kutip, Anda juga perlu menghindarinya.
Meskipun menggunakan garis miring terbalik sebagai karakter pelarian, Anda tidak perlu melarikan diri garis miring terbalik yang biasa terdapat di jalur. Ini bertentangan dengan bagaimana Anda biasanya menggunakan garis miring terbalik sebagai karakter pelarian.
Jadi untuk perintah seperti
"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
Ini adalah contoh nyata dari dokumentasi SVNserve, yang memperlihatkan semua kasus khusus:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(linebreak ditambahkan untuk dibaca, jangan termasuk mereka)
Ini akan menambah layanan baru dengan baris perintah "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Demikian ringkasannya
- spasi setelah setiap parameter sc:
binpath=_
, displayname=_
dandepend=_
- setiap parameter sc yang berisi spasi harus dilampirkan dalam tanda kutip
- semua kutipan tambahan di dalam binpath lolos dengan garis miring terbalik: \"
- semua backslash di dalam binpath tidak lolos
binPath= "c:\abc\def.exe /Param1=ghi"
sepertinya ide yang tepat. Apakah garis miring terbalik perlu diloloskan (yaitu "c: \\ abc \\ ...")? Hal terburuk, Anda bisa langsung mengedit nilai Registry setelahnya jika SC.EXE tidak bisa melakukannya.