2016-06-30 3 views
1

У меня есть код, который обозначает запуск исполняемого файла из java-кода. Программа работает гладко до сегодняшнего дня. Я не знаю, что я изменился, однако я получаю следующее сообщение об ошибке:Система не может найти файл, указанный исполняемый файл из java

Cannot run program "\Release\program.exe" (in directory "I:\Release\"): CreateProcess error=2, The system cannot find the file specified

код я использую следующее:

Process proc = rt.exec("Release\\program.exe", null, new File("I:\\Release\\")); 

Что может быть проблема? Он работал нормально.

EDIT:Process proc = rt.exec("program.exe", null, new File("I:\\Release\\"));

Я получил ту же ошибку. Если я приказываю из проводника

> I:\\Release\\program.exe 

это работает отлично

+1

Есть ли папка с именем «Release» в пути I: \ Release? – NoRelect

+1

Существует ли файл 'I: \ Release \ Release \ program.exe'? – Andreas

+0

«Андреас Я знаю, что это странно, так оно и было, пока не узнаете. Если я удалю выпуск, это тоже не будет работать. Из проводника я запускаю следующую команду: I: \ Release \ program.exe –

ответ

1

Вы можете попробовать это?

// Java runtime 
Runtime runtime = Runtime.getRuntime(); 
// Command 
String command = "I:/Release/program.exe" ; 
// Process 
Process process = runtime.exec(command, null, new File("I:/Release")); 
+0

Хорошо, что это сработало. Но почему? В чем разница? –

+0

Я не могу объяснить. Я уже использовал это в прошлом, и у меня не было Единственное, что я могу сказать, это то, что вы должны использовать '/' вместо '\\' для путей, даже если вы находитесь в Windows с Java. Также вы должны использовать абсолютный путь для программ, а не относительные пути. –

+1

@Jose У меня была одна и та же проблема, и я перешел через источник ['ProcessBuilder.start'] (https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html#start- -), что привело меня к функции [CreateProcess' Windows] (h TTPS: //msdn.microsoft.com/en-us/library/windows/desktop/ms682425 (v = vs.85) .aspx). Документ для 'lpCommandLine' объясняет, где он ищет программу. Насколько я могу судить, каталог установлен только для того, чтобы команда могла получить желаемый cwd, но не используется для поиска самой команды. – whrrgarbl

2

Предполагая, что ваша структура папок выглядит следующим образом:

I:\Release\program.exe 

Ваш код будет тогда должен выглядеть следующим образом:

Process proc = rt.exec("program.exe", null, new File("I:\\Release\\")); 

EDIT: Попробуйте это вместо:

ProcessBuilder proc = new ProcessBuilder("I:\\Release\\program.exe"); 
proc.start(); 
+0

Кажется, имеет смысл , но у меня такая же ошибка. –

+0

Я получил то же самое с ProcessBuilder, :( –

Смежные вопросы