Windowsで.exeプログラムが実行中(処理中)かどうかを確認するにはどうすればよいですか?
私はJavaアプリケーションが1つの.exeプログラムを更新するアプリケーションを作成しています。そのため、そのexeプログラムがいくつかのクライアントによって使用されている場合、私のアプリケーションはexeプログラムの終了を要求し、終了後に自動的に.exeファイルを置き換えます新しいもので。
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
}
次のコードを実行してみてください:
Runtime rt = Runtime.getRuntime();
そして「タスクリスト」を実行します
tasklistは、現在実行中のプロセスのリストを返します(タスクマネージャのプロセスタブに表示されます)。
アプリケーションが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");
_
同じ原理が実行可能ファイルの削除にも適用されます。
Java 9以上のユーザー向けの提案です。
オペレーティングシステムに依存しません。
Interface ProcessHandle
static Stream<ProcessHandle> allProcesses()
詳細:https://docs.Oracle.com/javase/9/docs/api/Java/lang/ProcessHandle.html