निर्मित सेवाओं के लिए पैरामीटर में कुछ अजीब समस्याएं हैं, विशेष रूप से यदि कमांड में रिक्त स्थान या उद्धरण शामिल हैं:
यदि आप सेवा के लिए कमांड लाइन पैरामीटर दर्ज करना चाहते हैं , तो आपको पूरे कमांड लाइन को उद्धरणों में संलग्न करना होगा । (और binPath=
पहले उद्धरण के बाद और पहले एक जगह छोड़ दें , जैसा कि मृस्वाद्गे ने बताया है)
इसलिए, कमांड के लिए एक सेवा बनाने के लिए PATH\COMMAND.EXE --param1=xyz
आप निम्न बिनपाथ पैरामीटर का उपयोग करेंगे:
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
यहाँ SVNerve प्रलेखन से एक ठोस उदाहरण है, जो सभी विशेष मामलों को दर्शाता है:
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"
।
तो संक्षेप में
- प्रत्येक अनुसूचित जाति पैरामीटर के बाद अंतरिक्ष:
binpath=_
, displayname=_
औरdepend=_
- प्रत्येक sc पैरामीटर जिसमें रिक्त स्थान होते हैं उन्हें उद्धरणों में संलग्न किया जाना चाहिए
- बिनपाथ के अंदर के सभी अतिरिक्त उद्धरण बैकस्लैश के साथ बच गए हैं: \"
- बिनपाथ के अंदर सभी बैकस्लैश बच नहीं रहे हैं
binPath= "c:\abc\def.exe /Param1=ghi"
विचार सही लगता है। क्या बैकस्लैश से बचने की आवश्यकता है (यानी "c: \\ abc \\ ...")? सबसे खराब बात, आप सीधे रजिस्ट्री मान को संपादित कर सकते हैं यदि SC.EXE ऐसा नहीं कर सकता है।