From c111a5e37e3a3c7b84690ceb75886ba33a29c42f Mon Sep 17 00:00:00 2001 From: Andreas Kuhtz Date: Thu, 31 Jan 2019 12:38:39 +0100 Subject: [PATCH 1/3] Support to detect the coretto runtime from windows registry. (cherry picked from commit 1468c6c032ac1a47413cb4990e4b24a3d1ddf124) --- src/net/sf/launch4j/config/Jre.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/sf/launch4j/config/Jre.java b/src/net/sf/launch4j/config/Jre.java index cd91661..2de3333 100644 --- a/src/net/sf/launch4j/config/Jre.java +++ b/src/net/sf/launch4j/config/Jre.java @@ -54,7 +54,7 @@ public class Jre implements IValidatable { public static final String ARGS = "jvmArgs"; // __________________________________________________________________________________ - public static final String VERSION_PATTERN = "(1\\.\\d\\.\\d(_\\d{1,3})?)|[1-9][0-9]{0,2}(\\.\\d{1,3}){0,2}"; + public static final String VERSION_PATTERN = "(1\\.\\d\\.\\d((_|\\.)\\d{1,3})?)|[1-9][0-9]{0,2}(\\.\\d{1,3}){0,2}"; public static final String JDK_PREFERENCE_JRE_ONLY = "jreOnly"; public static final String JDK_PREFERENCE_PREFER_JRE = "preferJre"; From c829d23e63c55e63351ca0f11554672176bca7c6 Mon Sep 17 00:00:00 2001 From: Andreas Kuhtz Date: Fri, 14 Jun 2019 08:28:34 +0200 Subject: [PATCH 2/3] Add support to detect the AdoptOpenJDK installations from registry. --- head/head.o | Bin 28238 -> 28348 bytes head_src/head.c | 26 ++++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/head/head.o b/head/head.o index c7ef319d6d43d1abac76d30950f46d0a9d9e667f..d528ae7d60657aa3300256a008fdcc29190accc7 100644 GIT binary patch delta 9353 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 B7$N`w diff --git a/head_src/head.c b/head_src/head.c index 4ec50cd..38e7b61 100644 --- a/head_src/head.c +++ b/head_src/head.c @@ -490,9 +490,23 @@ BOOL isJavaHomeValid(const char* keyName, const int searchType) BOOL valid = FALSE; HKEY hKey; char path[_MAX_PATH] = {0}; + + char searchKeyName[_MAX_PATH] = {0}; + char searchValueName[_MAX_PATH] = {0}; + if(strstr(keyName, "AdoptOpenJDK") != NULL) + { + strcpy(searchValueName, "Path"); + strcpy(searchKeyName, keyName); + appendPath(searchKeyName, "hotspot\\MSI"); + } + else + { + strcpy(searchValueName, "JavaHome"); + strcpy(searchKeyName, keyName); + } if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - keyName, + searchKeyName, 0, KEY_READ | (searchType & KEY_WOW64_64KEY), &hKey) == ERROR_SUCCESS) @@ -501,7 +515,7 @@ BOOL isJavaHomeValid(const char* keyName, const int searchType) unsigned long bufferlength = _MAX_PATH; unsigned long datatype; - if (RegQueryValueEx(hKey, "JavaHome", NULL, &datatype, buffer, + if (RegQueryValueEx(hKey, searchValueName, NULL, &datatype, buffer, &bufferlength) == ERROR_SUCCESS) { int i = 0; @@ -655,6 +669,14 @@ BOOL findJavaHome(char* path, const int jdkPreference) jdkPreference); } + // AdoptOpenJDK + if (search.foundJava == NO_JAVA_FOUND) + { + regSearchJreSdk("SOFTWARE\\AdoptOpenJDK\\JRE", + "SOFTWARE\\AdoptOpenJDK\\JDK", + jdkPreference); + } + if (search.foundJava != NO_JAVA_FOUND) { strcpy(path, search.foundJavaHome); From 916aab7ef79f8168863bfe60408dfc89b9cf94b6 Mon Sep 17 00:00:00 2001 From: Andreas Kuhtz Date: Fri, 14 Jun 2019 08:00:03 +0200 Subject: [PATCH 3/3] Add support to detect the Liberica OpenJDK installations from registry. (cherry picked from commit a4cc273f4a48f1e52a14bbf16688e08e2d4d01e8) --- head/head.o | Bin 28348 -> 30938 bytes head_src/head.c | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/head/head.o b/head/head.o index d528ae7d60657aa3300256a008fdcc29190accc7..53ac94a83b533cf1f0828e0d4d7b6cac29eaf057 100644 GIT binary patch literal 30938 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

s4`?N~{Kr7wXS5GUY<>+$WRC!e^?v~p>;Gv= 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 w0H~XA+GnS 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 diff --git a/head_src/head.c b/head_src/head.c index 38e7b61..d219f09 100644 --- a/head_src/head.c +++ b/head_src/head.c @@ -321,8 +321,13 @@ int findNextVersionPart(const char* startAt) char* firstSeparatorA = strchr(startAt, '.'); char* firstSeparatorB = strchr(startAt, '_'); + char* firstSeparatorC = strchr(startAt, 'u'); char* firstSeparator; - if (firstSeparatorA == NULL) + if (firstSeparatorC != NULL) + { + firstSeparator = firstSeparatorC; + } + else if (firstSeparatorA == NULL) { firstSeparator = firstSeparatorB; }