Java检查Windows上是否安装了程序

时间:2016-03-16 08:59:14

标签: java windows zip

有没有办法检查Windows上是否安装了使用Java的特定程序?

我正在尝试使用7-Zip中的代码行命令开发一个自动创建zip存档的Java程序。

所以,我想检查Java是否在我的Windows操作系统'7-Zip'已安装。不检查运行的应用程序或操作系统是Windows还是Linux。如果在Windows上安装了“7-Zip”,我想获得一个bool(true / false)。

3 个答案:

答案 0 :(得分:0)

库Apache Commons有一个名为SystemUtils的类 - 完整文档可在https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/SystemUtils.html获得。

在此库中,您可以使用以下static boolean属性:

SystemUtils.IS_OS_LINUX
SystemUtils.IS_OS_WINDOWS

答案 1 :(得分:0)

类似Unix的解决方案将是简单地尝试使用带有--version标志的程序(在Windows上可能是/?或-像7zip一样-根本没有任何运行)并检查是否它失败,或者返回码将是什么。

类似的东西:

public boolean is7zipInstalled() {
    try {
            Process process = Runtime.getRuntime().exec("7zip.exe");
            int code = process.waitFor();
            return code == 0;
    } catch (Exception e) {
            return false;
    }
}

答案 2 :(得分:-1)

我认为你在谈论Windows。由于Java旨在成为一种独立于平台的语言,并且每个平台的确定方式各不相同,因此没有标准的Java API来检查它。但是,您可以在对爬网Windows注册表的DLL上进行JNI调用的帮助下执行此操作。然后,您可以检查注册表中是否存在与该软件关联的注册表项。您可以使用第三方Java API来抓取Windows注册表:jRegistryKey。

这是在jRegistryKey的帮助下的SSCCE:

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#exit()不是Windows时执行System.getProperty("os.name")并发出警告。

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