네이티브 C++/MFC에서 복잡한 설치/설치 프로그램을 작성하고 있습니다. 나는 설치되어있는 자바의 버전을 발견 할 수 있기를 바랄 것이다.네이티브 C++에서 Java 버전을 감지 할 수 있습니까?
이렇게 할 수 있나요?
네이티브 C++/MFC에서 복잡한 설치/설치 프로그램을 작성하고 있습니다. 나는 설치되어있는 자바의 버전을 발견 할 수 있기를 바랄 것이다.네이티브 C++에서 Java 버전을 감지 할 수 있습니까?
이렇게 할 수 있나요?
java -version
을 서브 프로세스 (파이프의 해당 프로세스 출력 읽기)에서 실행하고 결과 (있는 경우)를 분석 할 수 있습니다. 또는 Windows 레지스트리를 혼란스럽게 만들 수도 있습니다 (더 복잡하지만 덜 불쾌 할 수도 있음).
포크 다음 명령을 실행하는 프로세스 : 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 출력을 수집하고 구문 분석해야합니다.
플랫폼에있는 쉘의 도움이 필요하거나, 현재 디렉토리에 'java'바이너리가 없기 때문에 'java'를 실행하면 아무것도하지 않는다고 덧붙일 것입니다. * nix에서는 "sh -c 'java -version'"과 같은 것을 실행하여 실제로 경로에서 java를 실행하는지 확인합니다. Windows에서 이에 상응하는 것이 확실하지 않습니다. –
@Sean Owen : Windows는 일반적으로 쉘의 도움없이 프로세스의 PATH 환경 변수를 자동으로 찾습니다. –
출력을 수집하는 방법은 무엇입니까? STDOUT을 텍스트 파일로 리디렉션 한 다음 텍스트 파일을 구문 분석하여이 작업을 시도했습니다. 그러나 데이터가 여전히 파일 대신 화면으로 이동하므로 STDOUT을 사용하는 것 같지 않습니다. –
기계에 둘 이상의 JRE를 동시에 설치할 수도 있습니다. 설치 프로그램이 둘 이상의 JRE를 감지하면, 사용자 중 하나 (예 : 최신 사용자)가 앱에서 사용할 것으로 가정하지 않고 사용자에게 선택권을 제공해야합니다.
SOFTWARE \ JavaSoft \ Java Runtime Environment \ BrowserJavaVersion에서 버전 정보를 찾아서 구문 분석했습니다. 감사합니다. –
C++ 프로그램에서 "Java DLL 시작"이 가능합니까? 머신의 기본 JVM이 무엇인지 잘 알고 있어야합니다. –
브라우저 버전은 실제 시스템 버전이 될 수 없습니다 ... 대신 @ emg-2 대답을 사용하는 것이 좋습니다. –