本文承接《Runtime 详解三》
exec String[] cmdarray
- 如下所示,Runtime执行cmd指令的方法一共6个,另外3个在其它几篇中已经说过,现在主要讲解红框中带String[]的
- command:cmd命令/指令,适合程序与参数路径中不带空格的命令,如:"cmd /c del E:/wmx/log.txt"、"cmd /c D:\PotPlayer\PotPlayerMini.exe E:/wmx/zl2.mp4"
- cmdarray:cmd指令数组,适合程序和参数路径中带空格的命令,程序路径形如“C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE”,或参数路径形如“E:\wmx 笔记\Map in-depth.docx”。
- envp:参数值,提供给command/cmdarray中参数的值
- dir:cmd程序启动的目录
import com.lct.utils.SystemUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2018/6/27 0027. * 杀进程测试类 */ public class ProcessTest { public static void main(String[] args) { try { /** 指定cmd指令数组 * 只要有空格,则必须采用如下方式分开写。 * 用Runtime.exec(String command)方法是不行的*/ String[] paramArr = new String[2]; paramArr[0] = "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE"; paramArr[1] = "E:\\wmx\\Map_in-depth.docx"; Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec(paramArr); /** 休眠10秒后,关闭WINWORD.EXE程序*/ Thread.sleep(10000); if (process.isAlive()) { process.destroy(); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行VBS脚本文件
import java.io.*; import java.util.Date; /** * Created by Administrator on 2018/6/29 0029. */ public class volumeTest { public static void main(String[] args) { try { System.out.println(new Date()); /**创建一个临时文件,它的目录是系统的临时目录,文件名会有一穿随机字符 * 在虚拟机关闭的时候,自动删除此文件*/ File file = File.createTempFile("A_wmx", ".vbs"); file.deleteOnExit(); /** 这是一条使用vbs操作系统音量静音的脚本内容 * 将它写入到文件中去*/ String vbsMessage = "CreateObject(\"Wscript.Shell\").Sendkeys \"棴\""; FileOutputStream fileOutputStream = new FileOutputStream(file); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK"); outputStreamWriter.write(vbsMessage); outputStreamWriter.flush(); outputStreamWriter.close(); /**然后动态执行此Vbs文件,当然也可以将前缀"wscript"换成常规的"cmd /c" * 但是vbs文件建议直接使用"wscript直接运行"*/ String cmd = "wscript " + file.getPath(); Runtime.getRuntime().exec(cmd).waitFor(); System.out.println(cmd); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }