У меня есть некоторый код Java, который выполняет определенную команду на компьютере с Windows. Тем не менее, это странное поведение в том, что одна и та же команда работает на одной машине, но не работает на трех других. Насколько я могу судить, каждая из четырех машин идентична.
Команда такая:
cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters
Где %APP_HOME%
- системная переменная, для которой установлено значение «D: / path / to / program».
Я получаю следующую ошибку:
Сообщение об ошибке приложения о невозможности открыть один из журналов или «связанный файл»:
d: / путь / к / программе \ журналы. errno = 13, в доступе отказано
Я использую Java выглядит следующим образом:
Runtime.getRuntime().exec(cmdStr);
Где cmdStr
- это строка, содержащая команду, как описано выше. Теперь вещи, которые я знаю, являются:
- Я действительно должен использовать перегруженный метод Runtime.exec (String [])
- Команда использует сочетание прямой и обратной косой черты
Это действительные комментарии, с которыми я, вероятно, в конечном итоге и исправлю проблему, но я пытаюсь выяснить, почему точно такой же код не работает на только 3 из 4 машин.
И да, все пути, упомянутые в команде, существуют на коробке.
И это становится более странным. Если я выполню следующую (очень похожую) команду, она отлично работает на всех четырех клетках.
cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=D:\path\to\program\logs\errors.log -arg3 some more parameters
В приведенной выше рабочей версии единственное отличие состоит в том, что ссылка %APP_HOME%
была заменена абсолютным путем для аргумента -errorlogname
. Но переменная осталась указывать на местоположение исполняемого файла.
Теперь тот факт, что идентичный код прекрасно работает на одном компьютере, заставляет меня подозревать, что проблема не в коде Java. Точно так же я не вижу проблем с сочетанием наклонных направлений, потому что эта смесь работает на одной машине.
На мой взгляд, это должно произойти сбой на каждой машине. Не только один из них.
Очевидно, что если бы все действительно было идентично, оно сломалось бы (или сработало) на каждой машине. Но все вещи, на которые я думал посмотреть, идентичны.
Может кто-нибудь еще предложить что-нибудь еще рассмотреть?
Большое спасибо.