특정 소프트웨어가 Java의 사용자 시스템에 설치되어 있는지 감지합니다.

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

  •  20-09-2019
  •  | 
  •  

문제

Java 응용 프로그램이있어 특정 소프트웨어 (그중 하나는 Perl)가 필요합니다. Perl을 감지하기 위해 내가했던 일은 다음과 같습니다.

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

그리고 IoException이 있으면 perl이 없다고 선언합니다.

그러나 내 사용자 중 한 명이 경로 변형에 Perl을 배치하지 않았기 때문에 앱이 계속 실패했다고 불평했습니다. 이것이 제가 요구하는 이유입니다. PERL (또는 다른 소프트웨어)이 사용자 시스템과 프로그램 경로에 설치되어 있는지 여부를 감지하는 교차 수술 시스템 방법이 있습니까?

도움이 되었습니까?

해결책

대상 고객 (사용자)을 모르지만 실패하면 사용자가 경로 (FilechooserDialog)를 입력 한 다음이 경로를 향후 사용을 위해 저장하도록 자극 할 수 있습니다 (예외가 다시 발생하지 않는 경우). 얼마 전, 운 좋게도 Sysadmins 인 사용자가 있었기 때문에 오류가 처음 발생했을 때 해당 정보를 제공해도 괜찮습니다 (또한 속성 파일에서 이러한 값을 업데이트하거나 변경하는 방법도 문서화했습니다).

DON이 언급 한 다른 옵션은 설치와 관련하여 필요한 소프트웨어를 설치하는 것입니다. 이는보다 일반적인 옵션입니다.

다른 팁

이런 종류의 질문은 때때로 튀어 나오는 것 같습니다. (거의) 항상 아니요. 부정적인 대답의 가장 일반적인 이유는 Java가 모든 플랫폼에서 동일하게 설계함으로써 균질 한 가상 기계 환경에서 실행되기 때문입니다. 최소한 가장 많이 지원되는 플랫폼에서 당신이 추상화 할 수없는 작업은 쉽게 수행 할 수 없습니다. 일반적으로 OS의 외부 이벤트를 일반적으로 비 바바 응용 프로그램을 실행/설치하는 것과 같은 "쉽지 않은"카테고리로 떨어집니다.

확실히 목적을 위해 JNI 라이브러리에 대한 필요/시장이있을 수 있지만 그 사람들은 크로스 플랫폼 요구 사항이 질문은 항상 원하는 것처럼 보이므로 짧은 대답이 "아니오"입니다. 내가 볼 수있는 한, 현재하고있는 일은 포함하지 않는 한 Perl을 감지하는 가장 깨끗한 방법입니다. perljvm 또는 프로젝트에서 유사합니다.

사용자가 기꺼이하지 않는 경우

  • 합의 된 위치에 Perl을 설치하십시오
  • 환경 변수, 구성 파일, Windows 레지스트리 등에 위치를 저장하여 Perl이 설치된 위치를 표시하십시오.

그런 다음 'Perl'이라는 실행 파일의 전체 디스크를 검색하는 것만 옵션입니다. 분명히 이것은 매우 오랜 시간이 걸릴 수 있지만, 위치를 어딘가에 보관하면 적어도 한 번만 검색하면됩니다.

Java SDK를 사용하여 Windows 기본 정보를 얻는 것은 외부 API를 지원하지 않으면 불가능합니다. 외부 API (주로 LGPL 라이센스가 있고 완전히 열리지 않음)를 사용하는 대신 쉘 명령을 사용하여 동일하게 얻을 수 있습니다.

1 단계 - 응용 프로그램이 설치되었는지 확인

응용 프로그램이 설치되어 있는지 확인하려면 ProcessBuilder 또는 Runtime.exec을 사용하여 다음 PowerShell 명령 중 하나를 실행하십시오.

get-itemproperty hklm : Software Microsoft Windows currentVersion Uninstall* | Select-Object DisplayName | 여기서 {$ _. displayName -Match "Perl"}

"Perl"을 선택한 소프트웨어로 교체하고 이들의 출력을 스트리밍하고 처리하십시오.

Perl (위의 질문의 경우) 인 경우 2 단계 아래를 따라 경로를 설정하고 Java에서 Perl 스크립트를 실행하십시오.

2 단계 - 사용 가능한 경우 Java 코드를 사용하여 환경 경로로 설정하십시오.

3 단계 - Perl 스크립트를 실행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top