in src/main/cpp/launcher/windows/src/JavaUtils.c [610:651]
void installJVM(LauncherProperties * props, LauncherResource *jvm) {
WCHAR * command = NULL;
WCHAR * jvmDir = getParentDirectory(jvm->resolved);
jvmDir = appendStringW(jvmDir, L"\\_jvm");
createDirectory(props, jvmDir);
if(!isOK(props)) {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "... cannot create dir for JVM extraction :", 0);
writeMessageW(props, OUTPUT_LEVEL_DEBUG, 1, jvmDir, 1);
FREE(jvmDir);
return;
}
appendCommandLineArgument(&command, jvm->resolved);
appendCommandLineArgument(&command, L"-d");
appendCommandLineArgument(&command, jvmDir);
executeCommand(props, command, jvmDir, JVM_EXTRACTION_TIMEOUT, props->stdoutHandle, props->stderrHandle, NORMAL_PRIORITY_CLASS);
FREE(command);
if(!isOK(props)) {
if(props->status==ERROR_PROCESS_TIMEOUT) {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "... could not extract JVM : timeout", 1);
} else {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "... an error occured during running JVM extraction file", 1);
}
props->exitCode = props->status;
} else {
WCHAR * unpack200exe = appendStringW(appendStringW(NULL, jvmDir), UNPACK200_EXE_SUFFIX);
if(fileExists(unpack200exe)) {
unpackJars(props, jvmDir, jvmDir, unpack200exe);
} else {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "... no unpack200 command", 1);
props->status = ERROR_BUNDLED_JVM_EXTRACTION;
}
if(!isOK(props)) {
writeMessageA(props, OUTPUT_LEVEL_DEBUG, 1, "Could not unpack200 the JVM jars", 1);
}
FREE(unpack200exe);
}
FREE(jvm->resolved);
jvm->resolved = jvmDir;
}