2013-09-25 4 views
7

Как проверить, запущена ли какая-либо программа .exe в Windows?проверить, запущена ли какая-либо программа exe на окнах

Я делаю приложение Java, которое обновляет одну .exe-программу. Итак, если эта программа exe используется некоторым клиентом, мое приложение запрашивает закрытие exe-программы и после закрытия автоматически заменяет файл .exe на новый.

+1

проверить этот вопрос: [Как получить список текущих открытых окон/процессов с Java?] (Http://stackoverflow.com/questions/54686/how-to-get-a-list-of-current- open-windows-process-with-java) – Renan

+0

Вопросы об общих вычислениях не относятся к теме при переполнении стека. Я предлагаю вам испытать удачу на [Super User] (http://superuser.com) –

ответ

23

Вы можете запустить следующую инструкцию в своей программе 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 
} 
+2

+1 для полного кода: P – TheLostMind

+0

Спасибо Tharindu Rusira, который помог мне решить проблему! –

+0

Вместо того, чтобы объединить все линии вместе, вероятно, было бы намного эффективнее проверить 'line.contains (processName)' внутри цикла while. – 4castle

3

U можно попробовать следующее:

RUNTIME Rt = Runtime.getRuntime(); и выполнить «tasklist»

tasklist возвращает список выполняющихся в настоящее время процессов (как показано на вкладке процесса менеджера задач).

+0

Благодаря TheLostMind это очень простой подход. –

1

Вот полный код для проверки, если приложение работает на системе 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"); 

Этот же принцип применяется для удаления исполняемого файла.

Смежные вопросы