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

Sam*_*Sam 3 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\"");
Run Code Online (Sandbox Code Playgroud)

这是例外.

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)
Run Code Online (Sandbox Code Playgroud)

好吧,我已经改变了这个但仍然没有建立关联,而同一个命令是可执行的并且在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\"");
Run Code Online (Sandbox Code Playgroud)

任何补充建议?谢谢!

bob*_*mcr 8

事实证明,assoc并且ftype是内置的shell命令和不可执行的文件.对于copy,dir等等也是如此.您可以做的是cmd.exe使用/c参数启动来传递命令行字符串,例如cmd.exe /c assoc ....