2013-09-25 39 views
7

如何檢查Windows上是否有某個.exe程序正在運行(正在運行)?檢查一些exe程序是否在windows上運行

我正在做更新一個.exe程序的java應用程序。所以,如果某個客戶端使用該exe程序,我的應用程序會要求關閉exe程序,並在關閉後自動替換爲新的.exe文件。

+1

檢查此問題:[如何獲得當前打開的窗口/過程與Java的列表?](http://stackoverflow.com/questions/54686/how-to-get-a-list-of-current- open-windows-process-with-java) – Renan

+0

關於通用計算的問題在Stack Overflow上是無關緊要的。我建議你試試你的運氣[超級用戶](http://superuser.com) – 2013-09-25 12:52:55

回答

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

而不是將所有行連接在一起,檢查'while.'循環內的'line.contains(processName)'可能會更高效。 – 4castle

3

U可以嘗試以下方法:

運行RT =調用Runtime.getRuntime(); 並執行「任務列表」

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"); 

同樣的原理適用於刪除可執行文件。

相關問題