2012-03-11 7 views
1

JavaアプリケーションでPHPのexec functionを複製しようとしています。ここではPHPのコードです:JavaでPHPのexec()関数を複製しようとしています

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

そしてここでJavaコードです:

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 

を私は少しだ:私は私が言ってIOExceptionが取得していますことを実行すると

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

私の要素の、どのようにJavaで開くには、このau3ファイルを取得できますか?

+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(Windows API関数)では、どの動詞を使用するかのオプションが提供されます(デフォルトは開いています)。これにより、常にrun動詞を使用できますが、thisのようなラッパーを意味するjavaのwindows関数を使用することを意味します。それはもっと多くの労力を必要としますが、有効なAutoItインストールであれば動作することが保証されます。

関連する問題