如何检查一个程序是否安装在Windows系统上

如果在Windows系统上安装了一个程序,如何检查Java,例如检查Mozilla Firefox?

我假设你在谈论Windows。 由于Java被认为是独立于平台的语言,如何确定它的平台是不同的,所以没有标准的Java API来检查它。 但是,您可以使用爬行Windows注册表的DLL上的JNI调用来完成此操作。 然后,您可以检查注册表中是否存在与软件相关联的注册表项。 您可以使用第三方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 / etc(换句话说:在任何可以运行Java的地方)来检测是否安装了FF 。 否则,你将不得不将它作为一个Windows应用程序分发,并且在System.getProperty("os.name")不包含Windows的时候执行一个System#exit()和一个警告。

对不起,我不知道如何在其他平台上检测是否安装了FF,所以不要期待我的答案;)

没有我知道的API将允许你这样做 – 我期望最一般的方法是检查文件的位置。

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