【问题标题】:How to check if a program is installed on Windows system [duplicate]如何检查Windows系统上是否安装了程序[重复]
【发布时间】:2010-03-13 20:54:18
【问题描述】:

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

【问题讨论】:

    标签: java windows


    【解决方案1】:

    我假设您说的是 Windows。由于 Java 旨在成为一种独立于平台的语言,并且如何确定它的方式因平台而异,因此没有标准的 Java API 可以检查这一点。但是,您可以借助对爬取 Windows 注册表的 DLL 的 JNI 调用来完成此操作。然后,您只需检查与该软件关联的注册表项是否存在于注册表中。您可以使用第 3 方 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,所以不要指望我的回答;)

    【讨论】:

    • +1 介绍 jRegistryKey,谢谢
    • 卸载应用程序时,注册表并不总是被清除。
    【解决方案2】:

    据我所知,没有任何 API 可以让您执行此操作 - 我希望最通用的方法是检查文件位置。

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

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 2014-10-26
      • 2014-05-06
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2021-01-04
      相关资源
      最近更新 更多