Определить, установлено ли определенное программное обеспечение на компьютере пользователя на Java

StackOverflow https://stackoverflow.com/questions/1354186

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть Java-приложение, для запуска которого требуется определенное программное обеспечение (одним из них является Perl).То, что я обычно делал для обнаружения для Perl, это:

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

и если возникло исключение IOException, объявите, что Perl не было.

Однако один из моих пользователей пожаловался, что приложение продолжало сбоить из-за того, что он не поместил Perl в свой path varible.Так вот почему я спрашиваю:Существует ли какой-либо межоперационный системный способ определить, установлен ли Perl (или любое другое программное обеспечение) в системе пользователя и путь к программе?

Это было полезно?

Решение

Я не знаю вашу целевую аудиторию (пользователей), но в случае сбоя вы могли бы предложить пользователю ввести путь (FileChooserDialog), а затем сохранить этот путь для дальнейшего использования (если исключение не будет сгенерировано снова).Я сделал это некоторое время назад, к счастью, у меня были пользователи, которые были системными администраторами, поэтому они могли предоставить эту информацию, когда ошибка произошла в первый раз (я также задокументировал, как обновить или изменить эти значения в файле свойств).

Другой вариант, как упоминал Дон, заключается в установке необходимого программного обеспечения относительно вашей установки, это более распространенный вариант.

Другие советы

Такого рода вопросы, кажется, время от времени возникают, и ответ (почти) всегда есть "нет".Наиболее общая причина отрицательного ответа заключается в том, что Java запускается в однородной среде виртуальной машины, которая по замыслу одинакова на всех платформах;Те операции, от которых вы не можете абстрагироваться / выполнять надежно по крайней мере на большинстве поддерживаемых платформ, просто не могут быть выполнены легко.Обнаружение внешних событий в операционной системе в целом, таких как то, какие приложения, отличные от Java, также запускаются / устанавливаются, попадает в эту категорию "нелегко сделать".

Конечно, для этой цели могла бы существовать потребность / market в библиотеках JNI, но они сильно отличаются от кросс-платформенный требование на эти вопросы всегда, кажется, хочется ответить, и именно поэтому короткий ответ - "нет".Насколько я могу видеть, то, что вы делаете в данный момент, является самым чистым способом обнаружения Perl, если только вы не готовы включить perljvm ( перлджвм ) или что-то подобное в вашем проекте.

Если пользователь не желает ни

  • Установите perl в согласованном месте
  • Укажите, где был установлен perl, сохранив его местоположение в переменной среды, файле конфигурации, реестре Windows и т.д.

тогда, похоже, вам остается только выполнить поиск по всему диску в поисках исполняемого файла с именем 'Perl'.Очевидно, что это может занять очень много времени, но если вы где-то храните местоположение, по крайней мере, вам потребуется выполнить поиск по нему только один раз

Получение собственной информации Windows с помощью Java SDK невозможно без поддержки внешних API.Вместо использования внешних API (которые в основном лицензированы LGPL и не полностью открыты), мы можем использовать команды оболочки, чтобы получить то же самое.

Шаг 1 - Проверка, установлено ли приложение (perl)

Чтобы проверить, установлено ли приложение, используйте ProcessBuilder или Runtime.exec для запуска одной из следующих команд PowerShell,

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Выберите-Имяобъекта отображения | где {$_.Имяобъекта отображения -соответствует "perl"}

Замените "perl" выбранным вами программным обеспечением, передайте их выходные данные в потоковую передачу и обработайте их.

Если PERL (для приведенного выше вопроса), выполните следующие 2 шага, чтобы задать path и запустить perl-скрипт с java

Шаг 2 - Если доступно, задайте для него Путь к среде, используя java-код.

Шаг 3 - Запустите свой perl-скрипт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top