Java 是什么原因引起的;系统找不到指定的文件";使用Runtime.exec?(助理秘书长/F类型)

Java 是什么原因引起的;系统找不到指定的文件";使用Runtime.exec?(助理秘书长/F类型),java,exec,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\""); 这是

有人知道为什么这两条语句会导致显示的异常吗

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\"");

有补充建议吗?谢谢大家!

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

exec(“assoc.vlan=\“文件类型描述”)如果这是建立文件关联,请注意,它可以为应用程序添加文件关联。此外,它还可以在Windows、OSX和*nix上实现。请参阅for..demo和可下载的源代码。感谢您的即时回答,它消除了异常,但以这种方式启动时不会发生关联,但是,当相同的例程在命令提示符下运行时,它工作正常!请评论!如果您在Windows Vista或更高版本上运行,则这些命令需要提升权限(因为它们最终会写入注册表);否则您将看到“拒绝访问”错误。使用
exec()
调用返回的
Process
对象上的
waitFor
捕获错误代码。您可能会看到它不是零(可能是5表示拒绝访问)!多谢各位!现在是我的最后一个问题!如何在提升模式下运行这些命令??!我以前没做过!最简单的情况,但通常对可用性不利:您强制用户提升应用程序的启动级别,然后默认情况下,您所做的任何操作都会提升。稍微好一点:使用适当的清单设置,在应用程序启动时自动请求提升(例如)--这需要单独编译的EXE,但对于典型的Java应用程序来说效果不好。更多选项:您仅以“即时”的方式请求提升操作。这需要一种相当于ShellExecute()的方法,传递“runas”动词来提示提升。或者你可以实现一个NT服务进程,你可以通过它进行通信来执行更高权限的操作(显然这是一个安全漏洞,除非你正确地锁定了你的应用程序和这个服务之间的通信通道)——在Java中可能不那么容易,而且要复杂得多。等等等等。