15

Windows で .exe プログラムが実行中 (進行中) かどうかを確認するにはどうすればよいですか?

1 つの .exe プログラムを更新する Java アプリケーションを作成しています。したがって、そのexeプログラムがクライアントによって使用されている場合、私のアプリケーションはexeプログラムを閉じるように要求し、閉じた後、.exeファイルを新しいものに自動的に置き換えます。

4

4 に答える 4

40

Java プログラムで次のステートメントを実行できます。その前に、 のタスクの名前を知っておく必要がありますtask manager。MS-Word が実行されていることを確認したいとします。次に、MS-Word を実行し、タスク マネージャーに移動します。[プロセス] タブの下に、という名前のプロセスが表示されword.exeます。対象とするプロセスの名前を見つけます。それができたら、次のコードを実行するだけです。

String line;
String pidInfo ="";

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

BufferedReader input =  new BufferedReader(new InputStreamReader(p.getInputStream()));

while ((line = input.readLine()) != null) {
    pidInfo+=line; 
}

input.close();

if(pidInfo.contains("your process name"))
{
    // do what you want
}
于 2013-09-25T13:08:08.740 に答える
4

Windowsアプリケーションがシステムで実行されているかどうかを確認するための完全なコードを次に示します。

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class ApplicationUtilities
{
    public static void runApplication(String applicationFilePath) throws IOException, InterruptedException
    {
        File application = new File(applicationFilePath);
        String applicationName = application.getName();

        if (!isProcessRunning(applicationName))
        {
            Desktop.getDesktop().open(application);
        }
    }

    // http://stackoverflow.com/a/19005828/3764804
    private static boolean isProcessRunning(String processName) throws IOException, InterruptedException
    {
        ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe");
        Process process = processBuilder.start();
        String tasksList = toString(process.getInputStream());

        return tasksList.contains(processName);
    }

    // http://stackoverflow.com/a/5445161/3764804
    private static String toString(InputStream inputStream)
    {
        Scanner scanner = new Scanner(inputStream, "UTF-8").useDelimiter("\\A");
        String string = scanner.hasNext() ? scanner.next() : "";
        scanner.close();

        return string;
    }
}

たとえば、runApplication()メソッドを使用して、アプリケーションがまだ実行されていないときにのみアプリケーションを実行できます。

ApplicationUtilities.runApplication("C:\\Program Files (x86)\\WinSCP\\WinSCP.exe");

実行可能ファイルの削除にも同じ原則が適用されます。

于 2016-06-04T11:45:53.300 に答える
3

次のコードを実行してみてください。

Runtime rt = Runtime.getRuntime();

「タスクリスト」を実行します

tasklist は、現在実行中のプロセスのリストを返します (タスク マネージャーの [プロセス] タブに表示されます)。

于 2013-09-25T13:10:20.857 に答える