2009-05-24 2 views

답변

1

java -version을 서브 프로세스 (파이프의 해당 프로세스 출력 읽기)에서 실행하고 결과 (있는 경우)를 분석 할 수 있습니다. 또는 Windows 레지스트리를 혼란스럽게 만들 수도 있습니다 (더 복잡하지만 덜 불쾌 할 수도 있음).

+0

SOFTWARE \ JavaSoft \ Java Runtime Environment \ BrowserJavaVersion에서 버전 정보를 찾아서 구문 분석했습니다. 감사합니다. –

+0

C++ 프로그램에서 "Java DLL 시작"이 가능합니까? 머신의 기본 JVM이 무엇인지 잘 알고 있어야합니다. –

+0

브라우저 버전은 실제 시스템 버전이 될 수 없습니다 ... 대신 @ emg-2 대답을 사용하는 것이 좋습니다. –

3

포크 다음 명령을 실행하는 프로세스 : java -version. 출력을 수집하고 파싱합니다. 다음과 같이 보입니다 :

java version "1.5.0_16" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284) 
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing) 

이것은 stderr에 쓰여집니다. stderr 출력을 수집하고 구문 분석해야합니다.

+0

플랫폼에있는 쉘의 도움이 필요하거나, 현재 디렉토리에 'java'바이너리가 없기 때문에 'java'를 실행하면 아무것도하지 않는다고 덧붙일 것입니다. * nix에서는 "sh -c 'java -version'"과 같은 것을 실행하여 실제로 경로에서 java를 실행하는지 확인합니다. Windows에서 이에 상응하는 것이 확실하지 않습니다. –

+1

@Sean Owen : Windows는 일반적으로 쉘의 도움없이 프로세스의 PATH 환경 변수를 자동으로 찾습니다. –

+0

출력을 수집하는 방법은 무엇입니까? STDOUT을 텍스트 파일로 리디렉션 한 다음 텍스트 파일을 구문 분석하여이 작업을 시도했습니다. 그러나 데이터가 여전히 파일 대신 화면으로 이동하므로 STDOUT을 사용하는 것 같지 않습니다. –

1

기계에 둘 이상의 JRE를 동시에 설치할 수도 있습니다. 설치 프로그램이 둘 이상의 JRE를 감지하면, 사용자 중 하나 (예 : 최신 사용자)가 앱에서 사용할 것으로 가정하지 않고 사용자에게 선택권을 제공해야합니다.

2

레지스트리를 사용하는 것이 좋습니다. 당신은 창문을 프로그래밍하고 있습니다. 창문처럼 그렇게하십시오. 레지스트리 불안은 비합리적입니다. 버전에 대한

레지스트리 키를 어떻게 얻을 수있는 레지스트리 값이 here을 찾을 수 있습니다

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion 

정보.

기타 Java 관련 레지스트리 키에 대한 정보는 here에서 찾을 수 있습니다.

관련 문제