This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-daemon.git
The following commit(s) were added to refs/heads/master by this push: new aa4e490 Fix DAEMON-404. Expand search for jvm.dll to include registry's JavaHome aa4e490 is described below commit aa4e490483c9d9d2aa0495599cb27cbf35e3721c Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Sep 4 12:44:07 2019 +0100 Fix DAEMON-404. Expand search for jvm.dll to include registry's JavaHome --- src/changes/changes.xml | 5 +++++ src/native/windows/src/javajni.c | 27 +++++++++++++++++++++++---- src/site/xdoc/procrun.xml | 8 +++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index eb5e620..c7c0328 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -50,6 +50,11 @@ Procrun. Correct a regression in the fix for DAEMON-391 that caused the GUI to mix-up the WARN and INFO logging levels. </action> + <action issue="DAEMON-404" type="fix" dev="markt"> + Procrun. Expand the search for a valid Java runtime library to include + the current JDK home defined in the Windows registry. Fully document the + search algorithm used to find the Java runtime library. + </action> </release> <release version="1.2.0" date="2019-06-28" description="Feature and bug fix release"> <action type="fix" dev="markt" due-to="mturk" > diff --git a/src/native/windows/src/javajni.c b/src/native/windows/src/javajni.c index d599236..a7f874c 100644 --- a/src/native/windows/src/javajni.c +++ b/src/native/windows/src/javajni.c @@ -213,10 +213,12 @@ static BOOL __apxLoadJvmDll(APXHANDLE hPool, LPCWSTR szJvmDllPath, LPCWSTR szJav apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib specified '%S'", dllJvmPath); return FALSE; } + apxLogWrite(APXLOG_MARK_DEBUG "Explicit RuntimeLib specified '%S'", dllJvmPath); } else { // No explicit JVM path. Use the standard registry locations. dllJvmPath = apxGetJavaSoftRuntimeLib(NULL); + apxLogWrite(APXLOG_MARK_DEBUG "No explicit RuntimeLib specified. Checking registry. Found '%S'", dllJvmPath); } if (GetFileAttributesW(dllJvmPath) == INVALID_FILE_ATTRIBUTES) { @@ -224,27 +226,44 @@ static BOOL __apxLoadJvmDll(APXHANDLE hPool, LPCWSTR szJvmDllPath, LPCWSTR szJav * Check from Jre JavaHome registry key directly */ LPWSTR szJreHome = apxGetJavaSoftHome(NULL, TRUE); - apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib '%S'", dllJvmPath); if (szJreHome) { - apxLogWrite(APXLOG_MARK_DEBUG "Using Jre JavaHome '%S'", szJreHome); + apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib '%S', Checking registry for JRE home. Found '%S'", dllJvmPath, szJreHome); lstrlcpyW(jreAltPath, SIZ_PATHLEN, szJreHome); lstrlcatW(jreAltPath, SIZ_PATHLEN, L"\\bin\\server\\jvm.dll"); dllJvmPath = jreAltPath; + } else { + apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib '%S', Checking registry for JRE home. None found.", dllJvmPath); } } if (GetFileAttributesW(dllJvmPath) == INVALID_FILE_ATTRIBUTES) { - /* DAEMON-247: JavaSoft registry keys are invalid + /* DAEMON-247: JavaSoft JRE registry keys are invalid / not present * Check from Procrun's JavaHome registry key */ if (szJavaHome) { - apxLogWrite(APXLOG_MARK_DEBUG "Using JavaHome '%S'", szJavaHome); + apxLogWrite(APXLOG_MARK_DEBUG "Using explicitly configured JavaHome '%S'", szJavaHome); lstrlcpyW(jreAltPath, SIZ_PATHLEN, szJavaHome); lstrlcatW(jreAltPath, SIZ_PATHLEN, L"\\bin\\server\\jvm.dll"); dllJvmPath = jreAltPath; } } + if (GetFileAttributesW(dllJvmPath) == INVALID_FILE_ATTRIBUTES) { + /* DAEMON-404: JRE home in registry invalid / not present. + * Explicit JavaHome invalid / not present + * Check from JDK JavaHome registry key directly + */ + LPWSTR szJdkHome = apxGetJavaSoftHome(NULL, FALSE); + if (szJdkHome) { + apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib '%S', Checking registry for JDK home. Found '%S'", dllJvmPath, szJdkHome); + lstrlcpyW(jreAltPath, SIZ_PATHLEN, szJdkHome); + lstrlcatW(jreAltPath, SIZ_PATHLEN, L"\\bin\\server\\jvm.dll"); + dllJvmPath = jreAltPath; + } else { + apxLogWrite(APXLOG_MARK_DEBUG "Invalid RuntimeLib '%S', Checking registry for JDK home. None found.", dllJvmPath); + } + } + /* Suppress the not found system popup message */ errMode = SetErrorMode(SEM_FAILCRITICALERRORS); diff --git a/src/site/xdoc/procrun.xml b/src/site/xdoc/procrun.xml index 9a49b81..70217b1 100644 --- a/src/site/xdoc/procrun.xml +++ b/src/site/xdoc/procrun.xml @@ -383,7 +383,13 @@ will add the new value(s) to any existing value(s). <td>--Jvm</td> <td>auto</td> <td>Use either <b>auto</b> (i.e. find the JVM from the Windows registry) or specify the full path to the <b>jvm.dll</b>. - You can use environment variable expansion here.</td> + You can use environment variable expansion here. When auto is specified the following search order is used: + <ol> + <li>The current Java runtime library as defined in the registry</li> + <li>The current JRE as defined in the registry</li> + <li>The explicitly configured JavaHome for the service</li> + <li>The current JDK as defined in the registry</li> + </ol></td> </tr> <tr> <td>++JvmOptions</td>