2012-03-11 2 views
1

Я пытаюсь реплицировать PHP exec function в приложении Java. Вот PHP код:Пытается реплицировать функцию exec() PHP в Java

exec('C:/executer.au3'); 

А вот код Java:

Runtime.getRuntime().exec("C:/executer.au3"); 

Когда я бегу, что я получаю IOException говоря:

Exception in thread "main" java.io.IOException: Cannot run program "C:/executer.au3": CreateProcess error=193, %1 is not a valid Win32 application 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    at java.lang.Runtime.exec(Runtime.java:615) 
    at java.lang.Runtime.exec(Runtime.java:448) 
    at java.lang.Runtime.exec(Runtime.java:345) 
    at Executer.execute_captcha_check(Executer.java:248) 
    at _ProjectAmsterdam.main(_ProjectAmsterdam.java:36) 
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:189) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:133) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) 
    ... 5 more 

Я немного из моего элемента, как я могу открыть этот файл au3 в Java?

+5

Вы должны выполнить, выполнив что-то вроде: 'autoit.exe C:/executer.au3'. –

ответ

4

Файл, который вы упомянули, является файлом автозапуска, который ничего не делает сам по себе. Как текстовый файл.

Возможно, вам необходимо предоставить программу, которая будет запускать файл - например, программу Autoit.exe.

Runtime.getRuntime().exec("/Path/To/Autoit.exe C:/executer.au3"); 

Вдоль этих линий - я не могу проверить на данный момент.

Версия PHP exec может каким-то образом инициировать программу по умолчанию для файлов .au3. Это просто догадка.

+0

Ты совершенно прав, это сработало. Я просто не могу принять ответ еще :) –

2

Несмотря на то, что работает AutoIt.exe со сценарием в качестве аргумента командной строки, и, вероятно, это хорошо в большинстве ситуаций, я хотел бы представить это в качестве альтернативы.

Функция PHP exec, вероятно, использует ShellExecute, а не просто запускает ее. Это выглядит в реестре, чтобы найти связанное действие для файлов .au3.

Аналогичная вещь может быть выполнена в java с использованием Desktop.getDesktop().open(SomeFile).

Однако AutoIt позволяет пользователю проверять на время установки, хотят ли они, чтобы действие по умолчанию редактировало файл сценария или запустило его. В зависимости от настройки там это может означать, что вы в конечном итоге открываете скрипт в текстовом редакторе, а не запускаете его по назначению. ShellExecute (функция API окон) предоставляет возможность использования глагола (по умолчанию открыто). Это позволит вам всегда использовать глагол run, но означает использование функции windows из java, что означает оболочку, такую ​​как this. Хотя это будет означать гораздо больше усилий, вам гарантировано, что он будет работать с любой действующей установкой AutoIt.

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