diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
index f24962b01dabf2fd624df22793a831f7856ab799..d1bda27c3195ed18bb91a2bd2279a5d4f02dc103 100644
--- a/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
+++ b/applications/utilities/parallelProcessing/redistributePar/redistributePar.C
@@ -2307,7 +2307,9 @@ int main(int argc, char *argv[])
     // ~~~~~~~~~~~~~~~~
     // (replacement for setRootCase that does not abort)
 
-    Foam::argList args(argc, argv);
+    argList args(argc, argv);
+    #include "foamDlOpenLibs.H"
+
     const bool reconstruct = args.found("reconstruct");
     const bool writeCellDist = args.found("cellDist");
     const bool dryrun = args.found("dry-run");
diff --git a/applications/utilities/preProcessing/mapFields/mapFields.C b/applications/utilities/preProcessing/mapFields/mapFields.C
index 73914dd86d4f26dd681cb94bea01cf80d260d643..9e7872165d1e69e3b0ba08195d1897f27c53fcd0 100644
--- a/applications/utilities/preProcessing/mapFields/mapFields.C
+++ b/applications/utilities/preProcessing/mapFields/mapFields.C
@@ -276,11 +276,11 @@ int main(int argc, char *argv[])
 
 
     argList args(argc, argv);
-
     if (!args.check())
     {
         FatalError.exit();
     }
+    #include "foamDlOpenLibs.H"
 
     fileName rootDirTarget(args.rootPath());
     fileName caseDirTarget(args.globalCaseName());
diff --git a/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C b/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
index 4b580f6a878ddc639e1c97ae57870fd2bcd86b9c..13494ace9e23efc6bb909bf34b6dd2689ab4b5ad 100644
--- a/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
+++ b/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
@@ -208,6 +208,7 @@ int main(int argc, char *argv[])
     );
 
     argList args(argc, argv);
+    #include "foamDlOpenLibs.H"
 
     fileName rootDirTarget(args.rootPath());
     fileName caseDirTarget(args.globalCaseName());
diff --git a/src/OpenFOAM/include/foamDlOpenLibs.H b/src/OpenFOAM/include/foamDlOpenLibs.H
new file mode 100644
index 0000000000000000000000000000000000000000..27ee219943d9adcbf568f62f2fce0a111d87526c
--- /dev/null
+++ b/src/OpenFOAM/include/foamDlOpenLibs.H
@@ -0,0 +1,12 @@
+// Force dlOpen of FOAM_DLOPEN_LIBS,
+// which is a comma-separated list of quoted library names
+// (eg, "finiteVolume","fvOptions","meshTools")
+//
+// Principally for Windows applications where library loading may otherwise
+// be incomplete.
+
+#ifdef FOAM_DLOPEN_LIBS
+
+Foam::dlOpen({ FOAM_DLOPEN_LIBS }, false);  // Silent on errors
+
+#endif
diff --git a/src/OpenFOAM/include/setRootCase.H b/src/OpenFOAM/include/setRootCase.H
index 6205697d9549c6a164b86d20560c72e82d53c079..e90a7410c690c65f9f58dd1126ae0cb5fea5d802 100644
--- a/src/OpenFOAM/include/setRootCase.H
+++ b/src/OpenFOAM/include/setRootCase.H
@@ -15,3 +15,6 @@ if (!args.checkRootCase())
 //  {
 //      Foam::FatalError.exit();
 //  }
+
+// Force dlOpen of FOAM_DLOPEN_LIBS (principally for Windows applications)
+#include "foamDlOpenLibs.H"
diff --git a/wmake/makefiles/files b/wmake/makefiles/files
index 52a0b2db5658a3ce5d5b994baf0a238e8b989e15..fb825976c9343a934ff95f8672bc1d065f4bfbe9 100644
--- a/wmake/makefiles/files
+++ b/wmake/makefiles/files
@@ -35,6 +35,12 @@ SFILES          = $(OBJECTS_DIR)/sourceFiles
 
 sinclude $(OPTIONS)
 
+#------------------------------------------------------------------------------
+# Directory containing the wmake scripts
+#------------------------------------------------------------------------------
+
+WM_SCRIPTS      = $(WM_DIR)/scripts
+
 
 #------------------------------------------------------------------------------
 # Declare dependency of all make system files on FILES
@@ -45,7 +51,9 @@ all : $(OPTIONS) $(SFILES) $(VARS)
 
 $(OPTIONS) : $(MAKE_DIR)/options
 	@$(CPP) $(GFLAGS) $(MAKE_DIR)/options | sed -e 's@   *@ @g' > $(OPTIONS)
-
+ifeq ("$(WM_OSTYPE)","MSwindows")
+	@$(WM_SCRIPTS)/wmakeWindowsDlOpenLibs $(OPTIONS) >> $(OPTIONS)
+endif
 
 $(SFILES): $(MAKE_DIR)/files
 	@$(CPP) $(GFLAGS) $(MAKE_DIR)/files | sed -e 's@   *@ @g' > $(FILES)
diff --git a/wmake/scripts/wmakeWindowsDlOpenLibs b/wmake/scripts/wmakeWindowsDlOpenLibs
new file mode 100755
index 0000000000000000000000000000000000000000..44074a80bafe00d9c8ff362eb2f81beab3dc169c
--- /dev/null
+++ b/wmake/scripts/wmakeWindowsDlOpenLibs
@@ -0,0 +1,101 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2019 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#-------------------------------------------------------------------------------
+#                           | Copyright (C) 2011-2017 blueCAPE Lda
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM.
+#
+#     OpenFOAM is free software: you can redistribute it and/or modify it
+#     under the terms of the GNU General Public License as published by
+#     the Free Software Foundation, either version 3 of the License, or
+#     (at your option) any later version.
+#
+#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#     for more details.
+#
+#     You should have received a copy of the GNU General Public License
+#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Script
+#     wmakeWindowsDlOpenLibs
+#
+# Usage
+#     wmakeWindowsDlOpenLibs <build/applications/.../options>
+#
+# Description
+#     Extract library dependencies from the EXE_LIBS entry for Windows
+#     applications and emit as FOAM_DLOPEN_LIBS for use with setRootCase.H
+#     Forcibly dlOpen'ing these libraries ensures that they are truly loaded
+#     for the windows application binary.
+#
+#     An alternative means is to define external entry points into particular
+#     libraries and linking with '-u symbol', which would possibly have a lower
+#     overhead but is more code-intrusive and somewhat ad hoc.
+#
+#------------------------------------------------------------------------------
+optionsFile="$1"
+
+[ "$#" -gt 0 ] || exit 1
+[ -f "$optionsFile" ] || exit 2
+[ -r "$optionsFile" ] || exit 2
+
+# Representative exeName from the build path (for messages only)
+# Eg, build/.../basic/laplacianFoam/options -> laplacianFoam
+
+exeName="${optionsFile%/options}"   # Strip trailing '/options'
+exeName="${exeName##*/}"            # Strip leading path
+
+# Use only OpenFOAM-related libraries that we will can actually find
+hasLib()
+{
+    libFile="lib${1}.dll"   # NB: Windows only (.dll)
+
+    [ -e "$FOAM_LIBBIN/$libFile" ] || \
+    [ -e "$FOAM_USER_LIBBIN/$libFile" ] || \
+    [ -e "$FOAM_LIBBIN/$FOAM_MPI/$libFile" ]
+}
+
+
+# After the cpp stage, the EXE_LIBS (if they exist) will be on a single line
+# Extract EXE_LIBS = -labc ..., ignoring -L and .o entries
+#
+# The libNames output comprises comma-separated quoted strings
+#     "lib1","lib2","libN"
+# these are suitable for C-code or a std::initializer_list<fileName> etc.
+
+# The $() sub-shell is unquoted to ensure we get whitespace splitting
+# and read individual words, not lines.
+unset libNames
+for lib in $(sed -ne 's@^.*EXE\_LIBS.*=[ ]*@@p' "$optionsFile")
+do
+    case "$lib" in
+    (*.o | *')'*)
+        ;;
+
+    (-l[0-9A-Za-z]*)
+        lib="${lib#-l}"
+        hasLib "$lib" && libNames="$libNames${libNames:+,}\"$lib\""
+        ;;
+    esac
+done
+
+## Debugging: echo "$exeName: libNames=$libNames" 1>&2
+
+# Emit define for using with Foam::dlOpen()
+if [ -n "$libNames" ]
+then
+    echo "Adding dlOpen(dll) list for $exeName" 1>&2
+    echo "EXE_INC += -DFOAM_DLOPEN_LIBS='$libNames'"
+fi
+
+exit 0 # clean exit
+
+#------------------------------------------------------------------------------