[Java] 关于java.lang.Runtime.exec()方法运行命令所在目录的探讨。

测试代码:

None.gif import java.util. * ;
None.gifimport java.io.
* ;
None.gif
None.gif
public   class  BadExecJavac
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public static void main(String args[])
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
try
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{            
InBlock.gif            Runtime rt 
= Runtime.getRuntime();
InBlock.gif            Process proc 
= rt.exec("spant");
InBlock.gif            
//int exitVal = proc.exitValue();
InBlock.gif
            int exitVal = proc.waitFor();
InBlock.gif            System.
out.println("Process exitValue: " + exitVal);
ExpandedSubBlockEnd.gif        }
 catch (Throwable t)
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
InBlock.gif            t.printStackTrace();
ExpandedSubBlockEnd.gif          }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif


代码创建一个新进程,运行一个叫spant.exe(一个病毒软件)的软件,正确运行(注:spant.exe被我放置在C:\WINNT\System32\目录下)。这时候脑海中出现一个疑问,程序是如何找到spant.exe所在目录的呢?带着疑问,更改了spant.exe的路径为C:\,再次运行程序,抛出以下错误信息:
java.io.IOException: CreateProcess: spant error=2
我想应该是程序找不到需要创建的spant进程。
我认为Runtime.exec()运行程序的默认目录应该又系统默认环境变量指定,于是打开系统Path环境变量,发现:
Path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\j2sdk1.4.1_06\bin\;C:\Program Files\Microsoft SQL Server\80\Tools\BINN

于是,我尝试把spant.exe转移到其中一个环境变量指定的目录:C:\j2sdk1.4.1_06\bin\中,再次运行程序,spant.exe被成功调用。答案已经非常清晰。

带着程序员应该具备的严谨态度,我再做如下尝试:
为环境变量添加一个路径: C:\

然后重启cmd.exe,把spant.exe转移到C:\,再次运行程序,spant.exe再次被成功调用。
所有疑问都已经解决,得出如下结论:

结论:java.lang.Runtime.exec()方法所唤起的程序的路径由系统默认环境变量Path所指定。

转载于:https://www.cnblogs.com/johnny/archive/2005/03/25/125406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值