Java获取Windows系统指定软件进程号及启动软件
windows,java,软件2016-11-04
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53009445
本文主要说明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
如下图:
Java实现分为2步:
其实主要就是将这个命令“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]
对第一步进程检测返回的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;
}
}