Java获取Windows系统指定软件进程号及启动软件

2017-01-13 15:00:45来源:csdn作者:loongshawn人点击

第七城市

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53009445

1 背景

本文主要说明Java获取Windows系统指定软件进程号及启动软件的方法。不过在说明之前,先回顾下Windows的cmd命令行中如何查看进程信息及启动软件。

这里以启动SQL Server客户端为例说明,打开cmd命令窗口,执行下列命令:

# 查看Ssms.exe的进程信息
tasklist /fi "imagename eq Ssms.exe" /fo list# 启动Ssms.exe,下列地址为SQL Server客户端安装路径
D:/BusinessSoftWares/SqlServer2008/sharex86/100/Tools/Binn/VSShell/Common7/IDE/Ssms.exe

如下图:

2 Java实现

Java实现分为2步:


第一步,查看指定软件进程信息,并提取进程PID存进List数组;
第二步,若没有检测到软件进程,则启动软件。
2.1 第一步,查看指定软件进程信息,并提取进程PID存进List数组

其实主要就是将这个命令“tasklist /fi “imagename eq Ssms.exe” /fo list”通过Java来执行,其中只需将“Ssms.exe”换成自己想要检测得软件名即可。

/**
* Created by loongshaw 2016/11/2.
*
* NOTE 进程编号查询
*
* para cmd=tasklist /fi "imagename eq Ssms.exe" /fo list
*/
public class ProcessSearchServiceImpl implements ProcessSearchService {private static final Logger logger = Logger.getLogger(ProcessSearchServiceImpl.class);public List<String> search(String cmd) {BufferedReader bufferedReader = null;
List<String> list = new ArrayList<String>();try{
Process process = Runtime.getRuntime().exec(cmd);
System.out.println(cmd);
logger.debug(cmd);bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String str;
while ((str = bufferedReader.readLine()) != null){if (str.startsWith(Constant.START_STRING)){
String[] array = str.split(":");
String pid = array[1].trim();list.add(pid);
}
logger.debug(str);
}
logger.info(list);}catch (IOException e){
logger.debug(e.toString());
}finally {
try {
bufferedReader.close();
} catch (IOException e) {
logger.debug(e.toString());
}
}return list;
}
}

输出信息:

2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - Windows CMD:tasklist /fi "imagename eq Ssms.exe" /fo list
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] -
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - 映像名称: Ssms.exe
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - PID:210324
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - 会话名: Console
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - 会话# : 1
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [DEBUG] - 内存使用 :68,152 K
2016-11-04-14-23 [main] [com.amap.axf.data.single.service.impl.ProcessSearchServiceImpl] [INFO] - PID list:[210324]2.2 第二步,若没有检测到软件进程,则启动软件。

对第一步进程检测返回的List数组进行判断,若为空则执行软件启动方法。

/**
* Created by loongshawn on 2016/11/2.
*
* NOTE 启动软件
*
* para name="Ssms.exe",替换为自己想要启动的软件名
*/
public class ProgramLauchServiceImpl implements ProgramLauchService {public String launch(String name) {String exception = "";try {
Runtime.getRuntime().exec(name);}catch (IOException e){
exception = e.toString();
}return exception;
}
}
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台