【发布时间】:2013-06-28 11:36:26
【问题描述】:
我正在开发一个基于 java 的桌面应用程序。一个要求是,如果应用程序正在运行并且用户尝试再次启动应用程序,它应该执行一些操作,例如显示一些警报等。
我为此使用了文件,当用户运行应用程序时,它会将一些文本添加到文件中并将其保存在本地系统的某个位置,当用户尝试再次运行应用程序时,我会检查文件并相应地处理情况,但是这有一些问题,比如如果应用程序异常终止,我无法删除该文件,在这种情况下,当用户尝试运行应用程序时,系统会显示应用程序已经在运行但实际上应用程序异常终止的警报。
我做了一些研发,发现我可以读取 Windows 任务管理器列表,然后我可以获取并检查我的应用程序是否正在运行。它工作正常,但在测试期间我遇到了一个问题,即 Windows 中有一个名为“tasklist”的软件/实用程序,转到“开始->运行”并键入 tasklist,它将显示任务列表。如果此实用程序未安装在您的系统上或由于某种原因被删除/损坏,那么这将不起作用,并且会出现同样的问题,即用户可以多次启动该应用程序。这是访问任务管理器项目的代码
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 作为应用程序,并使用高级安装程序来创建应用程序的安装程序。
【问题讨论】:
-
Eclipse 处理一个 .lock 文件,而后绘制的就是你所拥有的经验。 “桌面”不代表Windows,你会为Linux、Maxosx等实现吗?
-
我将打开一个
FileInputStream到一个 lock 文件。如果打开失败,应用程序正在运行。否则不是。
标签: java singleton desktop-application