2013-09-25 38 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"); 

同样的原理适用于删除可执行文件。

相关问题