0

デスクトップベースのアプリケーションのインスタンスが実行されているかどうかを確認できるように、コードを使用して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 を搭載したさまざまなシステムで試しましたが、1 つのシステムでプロセス リストを取得できません。

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

適切なリストを提供していません誰かが理由を教えてください。

前もって感謝します。

4

3 に答える 3

1

理由はわかりませんが (32/64 ビット バージョンの問題、実行ユーザーのアクセス許可、セキュリティなどの可能性があります)、これを達成するためのより良い方法があると思います。現在のアプローチは、javaw.exe を使用して実行されるほとんどの Java アプリケーションと一致します。

代わりに、アプリケーションの起動時にファイルをディスクに書き込むことを検討しないでください。そうすれば、追加の呼び出しでこれを確認できます。このアプローチは、複数のオペレーティング システムで実行する場合にも、より使いやすくなっています。

于 2013-06-18T07:34:00.340 に答える