我正在尝试在Java应用程序中复制PHP的exec function。这是PHP代码:
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
我有点不在我的元素中,我怎样才能在Java中打开这个au3文件?
答案 0 :(得分:4)
您提到的文件是一个自动脚本文件,它本身不会执行任何操作。像文本文件一样。
您可能需要提供将运行该文件的程序 - 例如Autoit.exe程序。
Runtime.getRuntime().exec("/Path/To/Autoit.exe C:/executer.au3");
沿着这些方向 - 我现在无法测试。
PHP exec版本可能以某种方式触发.au3文件的默认程序。这只是猜测。
答案 1 :(得分:2)
尽管使用脚本作为命令行参数运行AutoIt.exe可以正常工作,并且在大多数情况下可能都很好,但我想将此作为替代方案。
PHP exec
函数可能使用ShellExecute而不是仅运行它。这将在注册表中查找.au3
文件的相关操作。
使用Desktop.getDesktop().open(SomeFile)
可以在java中完成类似的事情。
但是,AutoIt允许用户在安装时检查他们是否希望默认操作是编辑脚本文件或运行它。这取决于那里的设置,这可能意味着你最终在文本编辑器中打开脚本,而不是按预期运行它。 ShellExecute
(Windows API函数)提供了使用什么动词的选项(默认为打开)。这将允许您始终使用run
动词,但意味着使用java中的windows函数,这意味着像this这样的包装器。虽然这意味着需要付出更多努力,但您可以保证它可以在任何有效的AutoIt安装上运行。