it-swarm.com.de

prüfen Sie, ob ein Exe-Programm auf den Fenstern läuft

Wie kann man überprüfen, ob ein .exe-Programm unter Windows läuft (ausgeführt wird)? 

Ich mache Java-Anwendung, die ein .exe-Programm aktualisiert. Wenn also dieses Exe-Programm von einem Client verwendet wird, fordert meine Anwendung zum Beenden des Exe-Programms auf und ersetzt nach dem Schließen automatisch die .exe-Datei durch eine neue.

12
duka.milan

Sie können die folgende Anweisung in Ihrem Java-Programm ausführen. Zuvor müssen Sie den Namen der Aufgabe in task manager kennen. Angenommen, Sie möchten sehen, dass MS-Word ausgeführt wird. Führen Sie dann MS-Word aus, wechseln Sie zum Task-Manager und unter der Registerkarte "Prozess" sollte ein Prozess mit dem Namen "Word.exe" angezeigt werden. Ermitteln Sie den Namen des Prozesses, auf den Sie abzielen. Sobald Sie das haben, führen Sie einfach den folgenden Code aus:

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
}
31
Aneesh

Sie können versuchen, den folgenden Code auszuführen:

Runtime rt = Runtime.getRuntime();

und "tasklist" ausführen

tasklist gibt eine Liste der aktuell ausgeführten Prozesse zurück (wie auf der Prozessregisterkarte des Task Managers angezeigt). 

3
TheLostMind

Hier ist ein vollständiger Code zum Überprüfen, ob eine Anwendung auf einem Windows-System ausgeführt wird oder nicht:

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;
    }
}

Beispielsweise können Sie die runApplication()-Methode verwenden, um die Anwendung nur auszuführen, wenn sie noch nicht ausgeführt wird:

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

Dasselbe Prinzip gilt für das Löschen der ausführbaren Datei.

1
BullyWiiPlaza

Nur ein Vorschlag für Benutzer von Java 9 oder höher.
Es ist sogar betriebssystemunabhängig:

Interface ProcessHandle
static Stream<ProcessHandle>    allProcesses​()

Weitere Details unter:
https://docs.Oracle.com/javase/9/docs/api/Java/lang/ProcessHandle.html

0