in src/main/cpp/launcher/windows/src/JavaUtils.c [283:330]
void getJavaProperties(WCHAR * location, LauncherProperties * props, JavaProperties ** javaProps) {
WCHAR *testJavaClass = props->testJVMClass;
WCHAR *javaExecutable = getJavaResource(location, JAVA_EXE_SUFFIX);
WCHAR *libDirectory = getJavaResource(location, JAVA_LIB_SUFFIX);
if(fileExists(javaExecutable) && testJavaClass!=NULL && isDirectory(libDirectory)) {
WCHAR * command = NULL;
HANDLE hRead;
HANDLE hWrite;
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... java hierarchy there", 1);
// <location>\bin\java.exe exists
appendCommandLineArgument(&command, javaExecutable);
appendCommandLineArgument(&command, L"-classpath");
appendCommandLineArgument(&command, props->testJVMFile->resolved);
appendCommandLineArgument(&command, testJavaClass);
CreatePipe(&hRead, &hWrite, NULL, 0);
// Start the child process.
executeCommand(props, command, NULL, JAVA_VERIFICATION_PROCESS_TIMEOUT, hWrite, INVALID_HANDLE_VALUE, JAVA_VERIFICATION_PROCESS_PRIORITY);
if(props->status!= ERROR_ON_EXECUTE_PROCESS && props->status!= ERROR_PROCESS_TIMEOUT) {
char * output = readHandle(hRead);
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, " output :\n", 0);
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, output, 1);
props->status = getJavaPropertiesFromOutput(props, output, javaProps);
if(props->status == ERROR_OK) {
(*javaProps)->javaHome = appendStringW(NULL, location);
(*javaProps)->javaExe = appendStringW(NULL, javaExecutable);
}
FREE(output);
} else if(props->status == ERROR_PROCESS_TIMEOUT) {
// java verification process finished by time out
props->status = ERROR_INPUTOUPUT;
}
FREE(command);
CloseHandle(hWrite);
CloseHandle(hRead);
} else {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "... not a java hierarchy", 1);
props->status = ERROR_INPUTOUPUT;
}
FREE(libDirectory);
FREE(javaExecutable);
}