无法正确获取任务管理器进程列表

时间:2013-06-18 07:20:46

标签: java

我正在使用一段代码来获取基于Windows系统的任务管理器的过程,以便我可以找到基于桌面的应用程序的实例是否正在运行。代码工作正常,这是我的代码。

private static void getAppInstancesCountAlreadyRunning() throws Exception {

    int isApplicationRunning = 0;
    String line;
    Process p = Runtime.getRuntime().exec(
    System.getenv("windir") + "/system32/" + "tasklist.exe");

    BufferedReader input = new BufferedReader(new InputStreamReader(
                p.getInputStream()));
    while ((line = input.readLine()) != null) {
        line = line.toLowerCase();
        logger.info("....... line read ... "+line);         
        if (line.contains("AppNameHere")) {// || line.contains("javaw.exe")
            logger.info("....... Already running @ " + line);
            isApplicationRunning++;
        }
    }
    input.close();

    if (isApplicationRunning > 1) {
        //Some code here....
    }
}

问题是:我尝试了不同的系统有Windows XP和7,但在一个系统上我没有得到进程列表,我认为行

Process p = Runtime.getRuntime().exec(System.getenv("windir") + "/system32/" +
 "tasklist.exe");

没有给出正确的清单可以有人说出是什么原因。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您不需要完整路径来执行此过程只需执行Process p = Runtime.getRuntime().exec("tasklist");

此外,您还需要考虑可能未安装任务列表。

答案 1 :(得分:1)

不确定原因(可能是32/64位版本问题,执行用户的权限,安全性等),但我会说有更好的方法来实现这一点。您当前的方法将与大多数Java应用程序匹配,其中许多应用程序使用javaw.exe运行。

相反,为什么不考虑在启动应用程序时将文件写入磁盘,因此额外的调用可以检查这一点。在多个操作系统中运行时,这种方法也更加友好。

答案 2 :(得分:0)

System.getenv(String path),尝试获取path的值,其中path是环境变量。如果未在env变量中定义windir,则System.getenv(String path)将无法返回任何一个。

相关问题