Apr. 17th, 2013

baramin: (Default)
Десклаймер: Я тут как частное лицо и все, что тут написано - полная отсебятина. За официальными ответами - в официальный саппорт. Здесь только мои личные мысли рекомендации.

И так. В этом сервис-релизе есть существенное изменение: Runtime.exec(String command) стал работать по спецификации. Как говорится, сожалею.

More precisely, the command string is broken
into tokens using a {@link StringTokenizer} created by the call
new {@link StringTokenizer}(command) with no
further modification of the character categories. The tokens
produced by the tokenizer are then placed in the new string
array cmdarray, in the same order.

Таким образом, вызов
    Runtime.exec("\"C:\\Program File\\foo.exe\" arg")


разобьет command на ["C:\\Program], [File\\foo.exe"] и [arg]. Первый элемент ["C:\\Program] будет рассматриваться как имя исполняемого модуля по всей строгости Security Manager и прочих проверок. И дальше это имя НЕ ИЗМЕНИТСЯ ВПЛОТЬ ДО ВЫЗОВА CreateProcess. Немного предсказуемо, что ["C:\\Program] не самое удачное имя для процесса. Так что на этом вызове все и кончится.

Что делать? Использовать вызов, принимающий массив строк. Там разделение имени исполняемого модуля и параметров - забота вызывающей стороны.

March 2017

S M T W T F S
   1234
567 891011
12131415161718
19202122232425
262728293031 

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 29th, 2017 02:03 am
Powered by Dreamwidth Studios