我与windows server 2008的第一次亲密接触
2007-12-18 23:14
363 查看
最近由于工作需要,使用java在调用cmd程序时,为了避免在路径当中有多个空格(例如:c:\\aa a\t t\m m),所以使用了
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
遇到了java.io.IOException: CreateProcess error=2, ?????????异常,找了很多原因都没有弄明白,然而使用
time.exec(new String[]{"java","-jar","Sp.jar"}, null, new File(args[1]));就可以!
如果使用:(前提是不能有不规则的空格出现)
Runtime time = Runtime.getRuntime();
try{
String command = "args[1]"+File.separator+Sp.exe;
time.exec(command);
}catch(Exception e){
e.printStackTrace();
}
也可以,同样在底层都是使用的ProcessBuilder去创建的进程,只是传递的参数不一样,结果就不一样。
我的理解是,在java中去执行exe文件,使用第一种方式,目录中windows在执行程序Sp.exe时,与主程序的工作目录不一样,就是说user.dir不一样,因为进程的工作目录不同,所以在创建进程时报错。
虽然你能在java程序中遍历到你需要的文件。
为了避免出现多个空格的情况,继续实验,最终找到了解决的方案:
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"cmd","/c","Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
cmd /c中具体含义,你在dos中输入 cmd /?就可以查看
本文出自 “java” 博客,转载请与作者联系!
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
遇到了java.io.IOException: CreateProcess error=2, ?????????异常,找了很多原因都没有弄明白,然而使用
time.exec(new String[]{"java","-jar","Sp.jar"}, null, new File(args[1]));就可以!
如果使用:(前提是不能有不规则的空格出现)
Runtime time = Runtime.getRuntime();
try{
String command = "args[1]"+File.separator+Sp.exe;
time.exec(command);
}catch(Exception e){
e.printStackTrace();
}
也可以,同样在底层都是使用的ProcessBuilder去创建的进程,只是传递的参数不一样,结果就不一样。
我的理解是,在java中去执行exe文件,使用第一种方式,目录中windows在执行程序Sp.exe时,与主程序的工作目录不一样,就是说user.dir不一样,因为进程的工作目录不同,所以在创建进程时报错。
虽然你能在java程序中遍历到你需要的文件。
为了避免出现多个空格的情况,继续实验,最终找到了解决的方案:
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"cmd","/c","Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
cmd /c中具体含义,你在dos中输入 cmd /?就可以查看
本文出自 “java” 博客,转载请与作者联系!
相关文章推荐
- Windows Server 2012 R2预览季,回首与Windows Server 2012的第一次亲密接触
- 零起点,亲密接触Windows Server 2008 R2的Hyper-v 推荐
- 第一次的亲密接触 我的互联网20年
- PHP与WCF第一次亲密接触
- 我与Boson的第一次亲密接触(完整版)
- Linux就是这个范儿之第一次亲密接触(2)
- 【转】Linux那些事儿之我是U盘(27)第一次亲密接触(三)
- 第一次亲密接触
- Ruby on Rack #1 - 与Rack的第一次亲密接触
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- Linux那些事儿之我是U盘(25)第一次亲密接触(一)
- 【零基础手把手教你学Python】02 与Python的第一次亲密接触——HelloWorld
- Cygwin第一次亲密接触
- eLua学习第一课:和Lua的第一次亲密接触
- 我和Spring第一次亲密接触
- 珍惜和企业的第一次亲密接触(转自jinxfei)
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- 李白与网络的第一次亲密接触(爆笑)
- Idea 第一次亲密接触
- 接口自动化测试系列之PHPUnit-第一次亲密接触