首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我可以在命令提示符中设置路径,而不能设置我的程序?

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

Stack Overflow用户
提问于 2011-03-01 14:17:01
回答 3查看 2.7K关注 0票数 0

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

代码语言:javascript
复制
c:\>path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"

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

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

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

代码语言:javascript
复制
String path = "C:\\Users\\NetBeansProjects\\IPTV1.7\\3rd_party\\";
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("path=%path%;"+ path);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-01 17:58:05

你的命令

代码语言:javascript
复制
path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"

不是一个“真实”的windows命令,而是一个变量赋值,由您的shell (cmd.exe)解释,只能在同一个shell会话中看到,并且从那里开始的任何命令(其他程序)都是可见的。

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

即使您可以通过调用cmd.exe来执行这个过程,它也只会影响相同的cmd.exe进程(任何程序都是从那里启动的,而不是您自己的cmd.exe进程(程序从这里开始)。

根据实际需要,您可以这样做,例如:

  • 将ProcessBuilder的路径直接提供给实际需要的过程(就像Aaron展示的那样)
  • 如果您想在下一个exec中查找命令,请自己搜索可执行文件
  • 将变量赋值和其他命令放在一个.BAT或.CMD文件中,并执行此命令。
票数 4
EN

Stack Overflow用户

发布于 2011-03-01 14:21:47

当您在命令提示符上键入此命令时,cmd程序将处理它并为您更改PATH变量。当您用Runtime尝试时,没有创建cmd进程,硬盘上也没有命令"path=%path%;C:\Users\NetBeansProjects\IPTV1.7\3rd_party\“(Windows实际上试图找到一个具有这个确切名称的程序)。

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

票数 3
EN

Stack Overflow用户

发布于 2011-03-01 14:24:50

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

代码语言:javascript
复制
    ProcessBuilder b = new ProcessBuilder();
    b.environment().put("PATH", whatever);
    b.command(whatever);
    Process p = b.start();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5155697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档