Parameter für erstellte Dienste weisen einige besondere Formatierungsprobleme auf, insbesondere wenn der Befehl Leerzeichen oder Anführungszeichen enthält:
Wenn Sie Befehlszeilenparameter für den Dienst eingeben möchten , müssen Sie die gesamte Befehlszeile in Anführungszeichen setzen. (Und lassen Sie nach binPath=
und vor dem ersten Zitat immer ein Leerzeichen , wie Frau Wadge betonte)
PATH\COMMAND.EXE --param1=xyz
Um einen Dienst für den Befehl zu erstellen, verwenden Sie den folgenden binPath-Parameter:
binPath= "PATH\COMMAND.EXE --param1=xyz"
^^ ^
|| |
space quote quote
Wenn der Pfad zur ausführbaren Datei Leerzeichen enthält , müssen Sie den Pfad in Anführungszeichen setzen.
Für einen Befehl, der sowohl Parameter als auch einen Pfad mit Leerzeichen enthält, benötigen Sie verschachtelte Anführungszeichen . Sie müssen den inneren Anführungszeichen mit Backslashes entkommen\" . Das Gleiche gilt, wenn die Parameter selbst Anführungszeichen enthalten, müssen Sie diese ebenfalls umgehen.
Obwohl Sie Backslashes als Escape-Zeichen verwenden, müssen Sie sich nicht den regulären Backslashes im Pfad entziehen. Dies steht im Widerspruch dazu, wie Sie normalerweise Backslashes als Escape-Zeichen verwenden.
Also für einen Befehl wie
"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
Hier ist ein konkretes Beispiel aus der SVNserve-Dokumentation, die alle Sonderfälle zeigt:
sc create svnserve
binpath= "\"C:\Program Files\CollabNet Subversion Server\svnserve.exe\" --service -r \"C:\my repositories\" "
displayname= "Subversion Server" depend= Tcpip start= auto
(Zeilenumbrüche werden zur besseren Lesbarkeit hinzugefügt, schließen Sie sie nicht ein.)
Dies würde einen neuen Dienst mit der Befehlszeile hinzufügen "C:\Program Files\CollabNet Subversion Server\svnserve.exe" --service -r "C:\my repositories"
.
Also zusammenfassend
- Leerzeichen nach jedem sc-Parameter :
binpath=_
,displayname=_
unddepend=_
- Jeder sc-Parameter, der Leerzeichen enthält, muss in Anführungszeichen gesetzt werden
- Alle zusätzlichen Anführungszeichen im Binpath werden mit Backslashes maskiert: \"
- Alle Backslashes im Binpath werden nicht maskiert
binPath= "c:\abc\def.exe /Param1=ghi"
scheinen also die richtige Idee zu sein. Müssen die Backslashes maskiert werden (dh "c: \\ abc \\ ...")? Das Schlimmste ist, dass Sie den Registrierungswert anschließend direkt bearbeiten können, wenn SC.EXE dies nicht kann.