ProcessBuilder fügt der Befehlszeile zusätzliche Anführungszeichen hinzu

8

Ich muss den folgenden Befehl mit ProcessBuilder erstellen:

%Vor%

Ich habe es mit folgendem Code versucht:

%Vor%

Dies übergibt jedoch Folgendes an das System (verifiziert mit Sysinternals Process Monitor)

%Vor%

Beachten Sie das Angebot vor /enable und die beiden Angebote nach Device . Ich muss diese zusätzlichen Anführungszeichen loswerden, weil sie den Aufruf fehlschlagen lassen. Weiß jemand, wie man das macht?

    
stefan.at.wpf 25.08.2012, 19:21
quelle

3 Antworten

8

Soweit ich weiß, müssen Sie, da ProcessBuilder keine Ahnung hat, wie Parameter an den Befehl übergeben werden, die Parameter separat an ProcessBuilder übergeben;

%Vor%     
Joachim Isaksson 25.08.2012, 19:26
quelle
10

Joachim hat Recht, aber seine Antwort ist unzureichend, wenn Ihr Prozess einheitliche Argumente wie folgt erwartet:

%Vor%

Wie aus stefan ersichtlich, wird ProcessBuilder Leerzeichen in Ihrem Argument sehen und es in Anführungszeichen setzen, wie folgt:

%Vor%

Das Aufteilen der Parameterwerte, wie von Joachim empfohlen, führt zu einem Leerzeichen zwischen /myparameter= und "my value" , was bei diesem Parametertyp nicht funktioniert:

%Vor%

Laut Sun ist es in ihrer unendlichen Weisheit kein Bug und doppelte Anführungszeichen kann mit Escapezeichen versehen werden , um das gewünschte Verhalten zu erzielen.

Um Stefans Frage endlich zu beantworten, ist dies eine Alternative, die funktionieren sollte, wenn der Prozess, den Sie aufrufen, die Dinge richtig macht:

%Vor%

Dies sollte Ihnen den Befehl "C:\Program Files\USBDeview\USBDeview.exe" "/enable \"My USB Device\"" geben, was den Trick machen könnte; YMMV.

    
KJP 15.11.2013 20:02
quelle
3

Zuerst müssen Sie die Argumente selbst aufteilen - ProcessBuilder macht das nicht für Sie - und zweitens müssen Sie keine umbrochenen Anführungszeichen um die Argumentwerte legen.

%Vor%

Die Anführungszeichen sind in der Befehlszeile erforderlich, um dem cmd-Parser mitzuteilen, wie die Wörter in Argumente aufgeteilt werden sollen, aber ProcessBuilder benötigt sie nicht, weil den Argumenten bereits die Vorteilung zugewiesen wurde.

    
Ian Roberts 07.08.2013 07:54
quelle