【问题标题】:Detect if certain software is installed on a user's machine in Java检测某些软件是否以 Java 安装在用户的机器上
【发布时间】:2010-11-24 03:52:36
【问题描述】:

我有一个 Java 应用程序,它需要某些软件(其中之一是 Perl)才能运行。我用来检测 Perl 的方法是:

Runtime.getRuntime().exec("perl Test.pl");

如果有 IOException 则声明没有 Perl。

但是,我的一位用户抱怨该应用程序一直失败,因为他没有将 Perl 放在他的路径变量中。所以这就是我要问的原因:是否有任何跨操作系统的方法来检测用户系统上是否安装了 Perl(或任何其他软件)以及程序的路径?

【问题讨论】:

    标签: java operating-system detect


    【解决方案1】:

    这类问题似乎时不时冒出来,而答案(几乎)始终是否定的。否定答案的最普遍原因是 Java 在同构虚拟机环境中运行,该环境在所有平台上的设计都是相同的。至少在最受支持的平台上,您无法抽象/可靠地执行的那些操作无法轻松完成。一般来说,检测操作系统中的外部事件(例如哪些非 Java 应用程序也在运行/安装)属于“不容易做到”的类别。

    当然,出于此目的,JNI 库可能存在需求/市场,但那些主要从 跨平台 要求转向这些问题似乎总是想要,这就是为什么简短的回答是“不” .据我所知,除非您愿意在项目中包含 perljvm 或类似内容,否则您目前正在做的是检测 Perl 的最干净的方法。

    【讨论】:

      【解决方案2】:

      如果用户不愿意

      • 在约定的位置安装 perl
      • 通过将 perl 的位置存储在环境变量、配置文件、Windows 注册表等中来指示 perl 的安装位置。

      那么看来您唯一的选择是在整个磁盘上搜索名为“Perl”的可执行文件。显然这可能需要很长时间,但如果你将位置存储在某个地方,至少你应该只需要搜索一次

      【讨论】:

      • 哦,天哪,对于 Windows 机器,后者可能需要 15 到 500 分钟 :) +1 只是为了思想的疯狂。
      【解决方案3】:

      我不知道您的目标受众(用户),但如果失败,您可以提示用户输入路径(FileChooserDialog),然后存储此路径以供将来使用(如果未再次引发异常)。前段时间我这样做了,幸运的是我的用户是系统管理员,所以他们可以在第一次发生错误时提供该信息(我还记录了如何在属性文件中更新或更改这些值)。

      Don 提到的其他选项是安装相对于您的安装所需的软件,这是一个更常见的选项。

      【讨论】:

        【解决方案4】:

        如果不支持外部 API,则无法使用 java SDK 获取 Windows 本机信息。我们可以使用 shell 命令来获得相同的功能,而不是使用外部 API(主要是 LGPL 许可且未完全开放)。

        第 1 步 - 检查 (perl) 应用程序是否已安装

        要检查应用程序是否已安装,请使用 ProcessBuilder 或 Runtime.exec 运行以下 PowerShell 命令之一,

        Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* |选择对象显示名称 |其中 {$_.DisplayName -match "perl"}

        将“perl”替换为您选择的软件,然后流式传输这些软件的输出并进行处理。

        如果是 PERL(针对上述问题),请按照以下 2 个步骤设置路径并从 java 运行 perl 脚本

        第 2 步 - 如果可用,使用 java 代码将其设置为环境路径。

        第 3 步 - 运行您的 perl 脚本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-20
          • 2011-02-15
          • 1970-01-01
          • 2014-01-15
          • 1970-01-01
          • 1970-01-01
          • 2021-01-22
          • 1970-01-01
          相关资源
          最近更新 更多