diff --git a/w32/subproc/misc.c b/w32/subproc/misc.c
index 96e43ae..65e7d66 100644
--- a/w32/subproc/misc.c
+++ b/w32/subproc/misc.c
@@ -36,7 +36,7 @@ int _cdecl compare(const void *a1, const void *a2)
 	return _stricoll(*((char**)a1),*((char**)a2));
 }
 bool_t
-arr2envblk(char **arr, char **envblk_out)
+arr2envblk(char **arr, char **envblk_out, int *envsize_needed)
 {
 	char **tmp;
 	int size_needed;
@@ -54,13 +54,14 @@ arr2envblk(char **arr, char **envblk_out)
 	}
 
 	arrcnt = 0;
-        size_needed = 0;
+	size_needed = *envsize_needed = 0;
 	while (arr[arrcnt]) {
 		tmp[arrcnt] = arr[arrcnt];
 		size_needed += strlen(arr[arrcnt]) + 1;
 		arrcnt++;
 	}
 	size_needed++;
+	*envsize_needed = size_needed;
 
 	qsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare);
 
diff --git a/w32/subproc/sub_proc.c b/w32/subproc/sub_proc.c
index 7cacac6..5814bf9 100644
--- a/w32/subproc/sub_proc.c
+++ b/w32/subproc/sub_proc.c
@@ -593,6 +593,7 @@ process_begin(
 	STARTUPINFO startInfo;
 	PROCESS_INFORMATION procInfo;
 	char *envblk=NULL;
+	int envsize_needed = 0;
 	int pass_null_exec_path = 0;
 
 	/*
@@ -734,7 +735,7 @@ process_begin(
 	}
 
 	if (envp) {
-                if (arr2envblk(envp, &envblk) ==FALSE) {
+		if (arr2envblk(envp, &envblk,&envsize_needed) ==FALSE) {
 			pproc->last_err = 0;
 			pproc->lerrno = E_NO_MEM;
 			free( command_line );
@@ -785,6 +786,10 @@ process_begin(
                                 exec_path ? exec_path : "NULL", command_line);
 			if (envblk) free(envblk);
 			free( command_line );
+			if (pproc->last_err == ERROR_INVALID_PARAMETER && envsize_needed > 32*1024) {
+				fprintf (stderr, "CreateProcess probably failed due to a too large environment. Env-size is %d bytes.\n",
+		                 envsize_needed);
+			}
 			return(-1);
 		}
 	}
