2013-09-25 14 views
7

Come verificare se qualche programma .exe è in esecuzione (è in corso) su Windows?controlla se qualche programma exe è in esecuzione su Windows

Sto creando un'applicazione Java che aggiorna un programma .exe. Quindi, se quel programma exe viene utilizzato da qualche client, la mia applicazione richiede la chiusura del programma exe e, dopo la chiusura, sostituisce automaticamente il file .exe con uno nuovo.

+1

controllare questa domanda: [Come ottenere un elenco di finestre aperte/processo con Java?] (Http://stackoverflow.com/questions/54686/how-to-get-a-list-of-current- open-windows-process-with-java) – Renan

+0

Le domande relative al calcolo generale sono off-topic su Stack Overflow. Vi suggerisco di tentare la fortuna su [Super User] (http://superuser.com) –

risposta

23

È possibile eseguire la seguente istruzione nel proprio programma java. Prima di ciò è necessario conoscere il nome dell'attività in task manager. Dì che vuoi vedere MS-Word in esecuzione. Quindi eseguire MS-Word, andare a Task Manager e sotto la scheda del processo, si dovrebbe vedere un processo denominato word.exe. Scopri il nome del processo che stai prendendo di mira. Una volta che avete, basta eseguire il codice seguente:

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 
} 
+2

+1 per il codice completo: P – TheLostMind

+0

Grazie a Tharindu Rusira che mi ha aiutato a risolvere il problema! –

+0

Invece di concatenare tutte le linee insieme, sarebbe probabilmente molto più efficiente controllare 'line.contains (processName)' all'interno del ciclo 'while'. – 4castle

3

U può provare la seguente:

Runtime rt = Runtime.getRuntime(); ed esegui "tasklist"

tasklist restituisce un elenco di processi attualmente in esecuzione (come mostrato nella scheda del processo del task manager).

+0

Grazie a TheLostMind è un approccio molto semplice. –

1

Ecco un codice completo per verificare se un'applicazione è in esecuzione su un sistema Windows o no:

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

Per esempio, è possibile utilizzare il metodo runApplication() per eseguire solo l'applicazione quando non è ancora in esecuzione:

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

Lo stesso principio si applica per l'eliminazione dell'eseguibile.

Problemi correlati