You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Jonathan Gallimore <jo...@gmail.com> on 2019/08/30 14:22:38 UTC

Windows Service with 32 bit JVM

HI folks

Just a heads-up that I'm aware of and am working on this:
https://issues.apache.org/jira/browse/DAEMON-401

This affects Windows users using a 32bit JVM and service on newer OSes.
This particular change syncs up the environment between MSVCRT and
UCRTBASE. Put simply, a call to set an environment variable
with SetEnvironmentVariableW won't necessarily be reflected in a call to
_wgetenv in a DLL (for example a JNI DLL loaded by the JVM) that is linked
to ucrtbase (built with recent versions of MSVC). To try and line the
environments up so everything is visible across all DLLs, commons-daemon
tries to dynamically load ucrtbase.dll and call _wputenv() in it. For some
reason, on X86, this is corrupting some memory and causing the service to
crash.

I'm trying to figure out what's going on. Workarounds are to use a 64 bit
JVM, or an old TomEE.x86.exe. Setting environment variables in the system
itself as opposed to adding the variables to the service should enable them
to be visible to everything without this _wputenv call in ucrtbase.dll.

I'll keep you posted.

Jon