为什么我可以在命令提示符中设置路径而不是我的程序?

时间:2011-03-01 14:17:01

标签: java path

我想使用此Windows命令在我的Java程序中设置路径(此路径包含一些在我的程序的本机外围设备中使用的DLL文件):

c:\>path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"

但是这会在程序运行时导致异常:

  

java.io.IOException:无法运行程序“path =%path%; C:\ Users \ NetBeansProjects \ IPTV1.7 \ 3rd_party \”:CreateProcess error = 2,系统找不到指定的文件

我不知道为什么我可以在命令提示符中设置路径没有问题但是然后在代码中抛出异常。

String path = "C:\\Users\\NetBeansProjects\\IPTV1.7\\3rd_party\\";
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("path=%path%;"+ path);

3 个答案:

答案 0 :(得分:4)

你的命令

path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"

不是“真正的”Windows命令,而只是由shell(cmd.exe)解释的变量赋值,仅在同一个shell会话中可见,并且从那里开始执行任何命令(其他程序)。

当尝试使用Runtime.exec()从Java执行此操作时,Windows CreateProcess函数尝试查找具有此奇怪名称的可执行文件,这显然不存在(我认为不能存在),并且您得到这个错误。

即使您可以执行此操作,例如通过调用cmd.exe,它也只会影响同一个cmd.exe进程(从那里开始的任何程序,而不是您自己的Java进程(以及从此处开始的程序)。< / p>

根据您的实际需要,您可以,例如:

  • 将ProcessBuilder的路径直接提供给实际需要它的进程(如Aaron所示)
  • 自行搜索可执行文件,如果您希望在下一个exec
  • 中查找命令
  • 将变量赋值和其他命令放在.BAT或.CMD文件中并执行此操作。

答案 1 :(得分:3)

在命令提示符下键入此内容时,cmd程序会对其进行处理,并为您更改PATH变量。当您使用Runtime尝试此操作时,不会创建cmd进程,并且您的硬盘上没有命令“path=%path%;C:\Users\NetBeansProjects\IPTV1.7\3rd_party\”(Windows实际上会尝试查找具有此确切名称的程序)。< / p>

将命令放在.BAT.CMD文件中。 Windows会自动创建一个cmd进程来为您执行它们。

答案 2 :(得分:3)

您可以在java中使用ProcessBuilder来生成进程并控制它获取的环境。因此,您将使用ProcessBuilder环境方法设置PATH环境变量,然后设置相关的命令行,然后启动。所以像(未经验证):

    ProcessBuilder b = new ProcessBuilder();
    b.environment().put("PATH", whatever);
    b.command(whatever);
    Process p = b.start();