`
雨过天晴0521
  • 浏览: 161110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]关于Runtime.exec

    博客分类:
  • java
 
阅读更多
import java.util.*; 
import java.io.*; 
 
public class BadExecJavac 
{ 
    public static void main(String args[]) 
    { 
        try 
        {             
            Runtime rt = Runtime.getRuntime(); 
            Process proc = rt.exec("spant"); 
            //int exitVal = proc.exitValue(); 
            int exitVal = proc.waitFor(); 
            System.out.println("Process exitValue: " + exitVal); 
        } catch (Throwable t) 
          { 
            t.printStackTrace(); 
          } 
    } 
} 



代码创建一个新进程,运行一个叫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所指定。
分享到:
评论

相关推荐

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    import org.apache.commons.exec.PumpStreamHandler; public class ExeRunUtil { public static void runWithCommonsExec(String... command) { CommandLine cmdLine = CommandLine.parse(command[0]); for (int...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    在Java编程中,`Runtime.exec()`方法是一个非常实用的功能,它允许我们执行操作系统级别的命令。这篇博客"Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!"探讨了如何利用`Runtime.exec()`来...

    when Runtime.exec() won't 中文翻译版

    ### Java中的Runtime.exec()陷阱详解 #### 引言 在Java编程中,`java.lang.Runtime` 类提供了与Java虚拟机的运行时环境交互的方法,其中`Runtime.exec()` 方法尤其受到开发者的青睐,因为它允许Java程序启动和控制...

    解决runtime.exec()执行进程block死锁以及为waitFor设置超时

    完美解决runtime.exec()执行进程block死锁以及为waitFor设置超时 不需要耗cpu的循环判断exitValue==0 开两个进程搞定

    java.lang.Runtime.exec() Payload知识点详解

    java.lang.Runtime.exec() Payload知识点详解 Java.lang.Runtime.exec() 方法是 Java 语言中用于执行操作系统命令的方法,它可以将参数传递给命令,并执行命令以获取结果。但是,在使用该方法时,需要注意一些重要...

    使用runtime实现linux命令行或shell脚本多次调用

    `Runtime.exec(String command)`方法用于执行单个命令,而如果需要执行包含多个命令的shell脚本,可以使用`Runtime.exec(String[] cmdArray)`,其中cmdArray是一个包含命令及其参数的字符串数组。 下面是一个简单的...

    Android中软件的静默安装

    1,申请root权限Runtime.getRuntime().exec("su"); 2,通过数据输出流DataOutputStream写入pm install命令; 3,最后获取Process进程的返回值int i = process.waitFor();,如果i=0,则表明已获取root权限。

    Runtime 执行bat

    `Runtime`类提供了多个`exec()`方法来执行命令或命令行。例如,`exec(String command)`用于执行单个命令,而`exec(String[] cmdArray)`则接受命令及其参数的数组。在执行bat脚本时,我们通常使用后者,因为bat文件...

    【IDEA】windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案

    windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案前言解决办法后记 前言 在使用IDEA本地开发监控守护线程的后台,我遇上了执行环境不兼容的问题,爆出各种“xxx不是内部或外部命令,...

    System.Runtime.InteropServices.COMException的解决方法

    完美解决“换另一台电脑上用VS2008继续开发web项目时出现 “System.Runtime.InteropServices.COMException”,然后是加载不了项目。” 只需要打开项目配置文件*.csproj,将<UseIIS>True</UseIIS> 改为 False,然后...

    android截屏

    这里不是通过view来截图,也不是通过底层的framebuffer实现截图,而是采用另外一种方法实现截图,通过Runtime.getRuntime().exec()来实现,并保存在sdcard上,代码很简单。

    AIUI使用.rar

    runtime.exec("cmd /c start " + url); } catch (IOException e) { e.printStackTrace(); } } /** * 鍦ㄥ欢杩熸寚瀹氱殑绉掓暟鍚庡叧鏈? * * @param sec * 鍏虫満寤惰繜锛屽崟浣嶏細绉? */ ...

    java中如何调cmd命令

    本文将详细介绍如何利用Java的`Runtime.getRuntime().exec()`方法来实现对CMD命令的调用,并通过具体的例子来帮助读者理解和掌握这一技术。 #### 1. 基本原理 `java.lang.Runtime`类提供了运行时环境的表示,通过...

    android读取/显示logcat信息

    这通常涉及使用`Runtime.getRuntime().exec()`方法来执行shell命令。 4. **解析和显示日志**:将`adb logcat`的输出解析成日志条目,然后在界面上展示。每个条目包含时间戳、优先级、标签和消息。你可以创建一个...

    java调用本地浏览器的demo

    首先,`Runtime.getRuntime().exec()`方法是Java标准库中用于执行系统命令的常用方式。例如,如果你想在Windows环境下打开默认浏览器,你可以这样写: ```java String url = "http://www.example.com"; Runtime....

    Java调用Python的jar包

    首先,我们需要了解Java如何调用外部程序,这通常通过`java.lang.ProcessBuilder`类或`Runtime.getRuntime().exec()`方法来实现。这两个方法允许Java启动一个新的进程,并执行操作系统命令。因此,我们可以在Java中...

    java调用播放器

    这种操作可以通过Java的`Runtime`类实现,具体来说是通过`Runtime.exec()`方法来执行外部命令。这种方式特别适用于需要在应用程序中集成多媒体功能但又不想引入复杂的多媒体处理库的情况。 #### 二、知识点详解 ##...

    Java调用应用程序和Dos中的命令

    这通常可以通过Java的`Runtime`类实现,尤其是通过`Runtime.exec()`方法来创建一个新的进程。本文将详细介绍如何使用Java来调用应用程序以及如何在Windows操作系统中调用DOS命令。 #### 一、Java调用应用程序的基本...

    Android程序中(APK程序)执行Adb shell 命令

    Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...

Global site tag (gtag.js) - Google Analytics