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

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

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

и если возникла исключительная ситуация IOException, объявите, что Perl не существует.

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

Ответы [ 4 ]

6 голосов
/ 30 августа 2009

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

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

3 голосов
/ 30 августа 2009

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

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

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

1 голос
/ 30 августа 2009

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

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

0 голосов
/ 18 июня 2014

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

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

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

Get-ItemProperty HKLM: \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall * | Select-Object DisplayName | где {$ _. DisplayName -match "perl"}

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

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

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

Шаг 3 - Запустите ваш Perl-скрипт.

...