2013-09-25 85 views
7

Cách kiểm tra xem một số chương trình .exe đang chạy (đang trong quá trình) trên Windows chưa?kiểm tra xem một số chương trình exe có đang chạy trên các cửa sổ

Tôi đang tạo ứng dụng java cập nhật một chương trình .exe. Vì vậy, nếu chương trình exe đó được sử dụng bởi một số ứng dụng, ứng dụng của tôi yêu cầu đóng chương trình exe và sau khi đóng tự động thay thế tệp .exe bằng một tệp mới.

+1

kiểm tra câu hỏi này: [Cách nhận danh sách các cửa sổ/quy trình mở hiện tại bằng Java?] (Http://stackoverflow.com/questions/54686/how-to-get-a-list-of-current- open-windows-process-with-java) – Renan

+0

Các câu hỏi về tính toán chung là không có chủ đề trên Stack Overflow. Tôi đề nghị bạn thử vận ​​may của mình trên [Siêu Người dùng] (http://superuser.com) –

Trả lời

23

Bạn có thể chạy câu lệnh sau trong chương trình java của mình. Trước đó bạn cần phải biết tên của nhiệm vụ trong task manager. Giả sử bạn muốn xem MS-Word đang chạy. Sau đó chạy MS-Word, đi đến trình quản lý tác vụ và trong tab quá trình, bạn sẽ thấy một quá trình có tên là word.exe. Tìm ra tên cho quá trình bạn đang nhắm mục tiêu. Một khi bạn có điều đó, bạn chỉ cần chạy đoạn mã sau:

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 để có mã đầy đủ: P – TheLostMind

+0

Cảm ơn Tharindu Rusira đã giúp tôi giải quyết vấn đề! –

+0

Thay vì nối tất cả các dòng lại với nhau, có lẽ sẽ hiệu quả hơn khi kiểm tra 'line.contains (processName)' bên trong vòng lặp 'while'. – 4castle

3

U có thể thử như sau:

Runtime rt = Runtime.getRuntime(); và thực hiện "tasklist"

danh sách tác vụ trả về danh sách các quy trình hiện đang thực thi (như được hiển thị trong tab quá trình của trình quản lý tác vụ).

+0

Cảm ơn TheLostMind đó là cách tiếp cận rất đơn giản. –

1

Dưới đây là một mã đầy đủ để kiểm tra nếu một ứng dụng đang chạy trên một hệ thống Windows hay không:

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

Ví dụ, bạn có thể sử dụng phương pháp runApplication() để chỉ chạy các ứng dụng khi nó không hoạt động được nêu ra:

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

Nguyên tắc tương tự cũng áp dụng cho việc xóa tệp thi hành.