用Java检测用户机器上是否安装了某些软件

问题描述 投票:0回答:5

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

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

如果出现 IOException,则声明不存在 Perl。

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

java operating-system detect
5个回答
6
投票

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

当然,出于此目的,JNI 库可能存在需求/市场,但这些库很大程度上偏离了这些问题似乎总是想要的“跨平台”要求,这就是为什么简短的答案是“不”。据我所知,您当前正在做的事情是检测 Perl 的最干净的方法,除非您愿意在项目中包含 perljvm 或类似内容。


3
投票

在约定的位置安装 perl
  • 通过将 Perl 的位置存储在环境变量、配置文件、Windows 注册表等中来指示 Perl 的安装位置。
  • 那么看来您唯一的选择就是在整个磁盘中搜索名为“Perl”的可执行文件。显然这可能需要很长时间,但如果您将位置存储在某个地方,至少您应该只需要搜索一次


1
投票

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


0
投票

第 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 脚本。


0
投票

Powershell 中的示例:

(gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Contains "Android Studio"

您将得到 
True

False
作为输出
这仅适用于Windows

© www.soinside.com 2019 - 2024. All rights reserved.