2011-03-01 22 views
0

我想设置的路径在我的Java程序与此Windows命令(此路径包含在我的程序的本地外围使用的一些DLL文件):为什么我可以在命令提示符下设置路径,但不是我的程序?

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

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

java.io.IOException的:不能运行程序 “路径=%路径%; C:\ Users \用户的NetBeansProjects \ IPTV1.7 \ 3rd_party中\”:CreateProcess的错误= 2,系统无法找到该文件指定

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

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

当你说本地外设,你是什么意思?在某些时候,你正尝试从你的Java程序中启动另一个进程,你想要做的是控制启动过程获取的路径? – 2011-03-01 14:29:18

回答

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程序(和计划从这里开始)。

根据您其实想要的东西,你可以,例如:

  • 给人以的ProcessBuilder路径直接向这实际上需要它(如阿伦表现)为
  • 搜索自己的过程可执行文件,如果您想要在下一个中查找命令
  • 将变量赋值和其他命令放在.BAT或.CMD文件中并执行此操作。
3

当在命令提示键入此,所述程序cmd处理它,并改变PATH变量为您服务。当您尝试与此Runtime,没有创建cmd过程,有你的硬盘上没有命令“path=%path%;C:\Users\NetBeansProjects\IPTV1.7\3rd_party\”(Windows实际上试图找到一个程序,这个确切的名字)。

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

+0

谢谢你的有价值的建议。我设置了一个bat文件。 – sajad 2011-03-01 19:16:44

3

您可以使用ProcessBuilder在Java中生成一个进程并控制它得到了环境。因此,您将使用ProcessBuilder环境方法设置PATH环境变量,然后设置相关的命令行,然后启动。因此,像(未经考验):

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

谢谢你的有价值的建议。我设置了一个bat文件。 – sajad 2011-03-01 19:16:21

相关问题