我有一个Java应用程序,它要求某些软件(其中之一是Perl)之前,它可以运行。我用来做检测Perl是:

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

如果有IOException声明,没有Perl。

然而,我的一个用户抱怨说,该应用程序的保障,因为他没有放Perl在他的道路varible.所以这就是为什么我问:是否有任何跨操作系统的方式,以检测是否Perl(或任何其他软件)安装对用户的系统和程序的路径?

有帮助吗?

解决方案

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

由唐提及的其他选项,是所需要的软件为相对安装到您的安装,这是一个比较常见的选项。

其他提示

这样的问题似乎时不时弹出来,答案的(几乎)的始终是否定的。对于否定的回答最普遍的原因是Java是在同质虚拟机环境,这是由设计在所有平台上运行相同;你不能抽象掉这些操作/不可靠的,至少最支持的平台就不能轻松完成。如该检测外部事件的OS一般非Java应用程序也运行/安装属于这一“不易做”的范畴。

当然,有可能需要/市场JNI库为目的,但那些从严重操纵的跨平台的要求,这些问题似乎总是想,这就是为什么简单的答案是“不” 。据我所看到的,你在做什么目前是检测Perl的最干净的方式,除非你愿意包含的 perljvm 或在您的项目类似。

如果用户是不是愿意既

  • 安装perl在一个商定的位置
  • 指示perl已经安装存放它的地理位置在一个环境变量、配置文件、windows注册,等等。

然后看来你唯一的选择是要搜索整个盘为一个可执行的名为'Perl'.显然这可能需要很长的时间,但是如果你的位置存储的地方,至少你应该只需要寻找一次

获取用java SDK窗口本地信息是不可能的,而不支持外部的API。除了使用外部的API(其中大部分是LGPL许可,而不是完全开放)的,我们可以使用shell命令来获得相同的。

<强>第1步 - 如果(perl的)被安装的应用程序检查

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

GET-ItemProperty HKLM:\ SOFTWARE \微软\的Windows \ CurrentVersion \卸载* |选择-对象显示名称|其中{$ _。DisplayName的-match “perl的”}

替换“perl的”您所选择的软件和流的这些输出和处理它。

如果PERL(对于上面的问题),按照以下2个步骤来设置路径和从Java运行perl脚本

步骤2: - 如果可用的,它使用Java代码设置为环境路径

步骤3 - 运行您perl脚本

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top