使用Runtime.exec导致“系统无法找到指定文件”的原因是什么? (缔合/ FTYPE)

时间:2011-12-15 03:51:23

标签: java exec

有谁知道为什么这两个语句导致显示的异常?

Runtime.getRuntime().exec("assoc .vlan=\"file type description\"");
Runtime.getRuntime().exec("ftype \"file type description\"=" + System.getProperty("user.home")+ "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\"");

这是例外。

java.io.IOException: Cannot run program "assoc": CreateProcess error=2, The system cannot find the file specified
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)

好吧,我已经改变了这个但仍然没有建立关联,而同一个命令是可执行的并且在cmd命令提示符下工作。

Runtime.getRuntime().exec("cmd.exe /c assoc .vlan=\"file type description\"");
Runtime.getRuntime().exec("cmd.exe /c ftype \"file type description\"=\"" + System.getProperty("user.home") + "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\"");

有任何补充建议吗?谢谢!

1 个答案:

答案 0 :(得分:8)

事实证明,assocftype是内置shell命令而非可执行文件。对于copydir等也是如此。您可以使用cmd.exe参数启动/c来传递命令行字符串,例如, cmd.exe /c assoc ...