尝试在 Java 中复制 PHP 的 exec() 函数

Trying to replicate PHP's exec() function in Java

提问人:Andrew G. Johnson 提问时间:3/12/2012 更新时间:3/12/2012 访问量:417

问:

我正在尝试在 Java 应用程序中复制 PHP 的 exec 函数。下面是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

我有点超出了我的元素,我怎样才能让这个 au3 文件在 Java 中打开?

java php 自动

评论

5赞 3/12/2012
您必须通过执行以下操作来执行: .autoit.exe C:/executer.au3

答:

4赞 zaf 3/12/2012 #1

您提到的文件是一个自动脚本文件,它本身不执行任何操作。就像一个文本文件。

您可能需要提供将运行该文件的程序 - 例如Autoit.exe程序。

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

沿着这些思路 - 我目前无法测试。

PHP exec 版本可能会以某种方式触发 .au3 文件的默认程序。这只是一个猜测。

评论

0赞 Andrew G. Johnson 3/12/2012
你说得很对,这奏效了。我只是还不能接受答案:)
2赞 Matt 3/12/2012 #2

尽管使用脚本作为命令行参数运行 AutoIt.exe 有效,并且在大多数情况下可能没问题,但我想将其作为替代方案。

PHP 函数可能使用 ShellExecute,而不仅仅是运行它。这将在注册表中查找文件的关联操作。exec.au3

在 java 中可以使用 .Desktop.getDesktop().open(SomeFile)

但是,AutoIt 允许用户在安装时检查他们是否希望默认操作是编辑脚本文件还是运行它。根据那里的设置,这可能意味着您最终会在文本编辑器中打开脚本,而不是按预期运行它。 (Windows API 函数)提供了使用哪个谓词的选项(默认为打开)。这将允许您始终使用动词,但意味着使用 java 中的 windows 函数,这意味着像这样的包装器。尽管这意味着更多的工作,但可以保证它可以在任何有效的 AutoIt 安装上运行。ShellExecuterun