如何检查Windows系统上是否安装了程序

14

我该如何使用Java检查Windows系统上是否安装了某个程序,例如Mozilla Firefox?

2个回答

11
我假设你在谈论Windows。由于Java旨在成为一种跨平台的语言,而且确定方法因平台而异,因此没有标准的Java API来检查它。但是,您可以通过调用DLL上的JNI来帮助使用爬取Windows注册表的方法来完成。然后,您只需检查与软件关联的注册表键是否存在于注册表中。有一个第三方Java API可以爬取Windows注册表:jRegistryKey

这里是一个SSCCE,使用了jRegistryKey:

package com.stackoverflow.q2439984;

import java.io.File;
import java.util.Iterator;

import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RootKey;

public class Test {

    public static void main(String... args) throws Exception {
        RegistryKey.initialize(Test.class.getResource("jRegistryKey.dll").getFile());
        RegistryKey key = new RegistryKey(RootKey.HKLM, "Software\\Mozilla");
        for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
            RegistryKey subkey = subkeys.next();
            System.out.println(subkey.getName()); // You need to check here if there's anything which matches "Mozilla FireFox".
        }
    }

}

如果你想要一个跨平台的应用程序,那么你还需要考虑Linux/UNIX/Mac/Solaris等系统(也就是Java能够运行的任何地方)中检测FF是否安装的方法。否则,你将不得不将其作为仅适用于Windows的应用程序进行分发,并在System.getProperty("os.name")不是Windows时进行System#exit()和警告提示。
抱歉,我不知道如何在其他平台上检测FF是否安装,所以请不要期望我能回答这个问题 ;)

1
+1 介绍 jRegistryKey,谢谢。 - stacker
当应用程序被卸载时,注册表并不总是被清除。 - Marche Remi

0

我不知道有任何API可以让你这样做 - 我认为最常见的方法是检查文件位置。

其他方法(如检查Windows注册表)取决于操作系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接