我正在研究基于java的桌面应用程序。一个要求是,如果应用程序正在运行并且用户尝试再次启动应用程序,则应该执行诸如显示某些警报等内容。
我使用了文件,当用户运行应用程序时,它会将一些文本添加到文件中并将其保存在本地系统的某个位置,当用户再次尝试运行应用程序时,我会检查文件并相应地处理情况,但是这是一个问题,如果应用程序异常终止,我无法删除该文件,在这种情况下,当用户尝试运行应用程序系统时,显示应用程序已在运行但实际应用程序异常终止的警报。
我做了一些R& D,发现我可以阅读Windows任务管理器列表然后我可以检查我的应用程序是否正在运行。它工作正常,但在测试过程中我遇到了一个问题i-e在Windows中有一个名为“tasklist”的软件/实用工具转到“开始 - >运行”并输入任务列表它将显示任务列表。如果您的系统上未安装此实用程序或由于某种原因删除/损坏此实用程序,则此操作无效,并且用户可以多次启动应用程序时出现同样的问题。以下是访问taskmanager项目的代码
Process p = Runtime.getRuntime().exec(
System.getenv("windir") + "/system32/" + "tasklist.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(
p.getInputStream()));
while ((line = input.readLine()) != null) {
/*
Make the comparison here and show alert.
*/
}
问题:检查应用是否已在运行的好方法是什么?我正在使用Java进行应用程序,使用高级安装程序来创建应用程序的安装程序。
答案 0 :(得分:5)
启动应用。使用Java Web Start并使用SingleInstanceService
。有关(演示和。)示例代码,请参阅demo. of the SingleInstanceService。
正在使用..高级安装程序来创建安装程序
请注意JWS:
答案 1 :(得分:1)
结帐http://ss64.com/nt/wmic.html 并尝试
String line;
try {
Process proc = Runtime.getRuntime().exec("wmic.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream());
oStream .write("process where name='THE NAME OF YOUR PROCESS.exe'");
oStream .flush();
oStream .close();
while ((line = input.readLine()) != null) {
System.out.println(line);
}:
input.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
提供者:How to detect via Java whether a particular process is running under Windows?