[PATCH] kernel32: Consider the working directory first when launching executables with CreateProcess.
Vijay Kiran Kamuju
infyquest at gmail.com
Wed Apr 17 03:56:56 CDT 2019
From: "Erich E. Hoover" <erich.e.hoover at gmail.com>
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=23934
From: Erich E. Hoover <erich.e.hoover at gmail.com>
Signed-off-by: Vijay Kiran Kamuju <infyquest at gmail.com>
---
dlls/kernel32/process.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 09f0433deb0..39e47390558 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -439,9 +439,17 @@ static HANDLE open_exe_file( const WCHAR *name, BOOL *is_64bit )
*/
static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen, HANDLE *handle )
{
+ WCHAR cur_dir[MAX_PATH];
+
TRACE("looking for %s\n", debugstr_w(name) );
- if (!SearchPathW( NULL, name, exeW, buflen, buffer, NULL ) &&
+ /* The working directory takes precedence over other locations for CreateProcess unless the
+ * 'NoDefaultCurrentDirectoryInExePath' environment variable is set (and the executable name
+ * does not contain a backslash). */
+ if ((NeedCurrentDirectoryForExePathW( name ) && GetCurrentDirectoryW( MAX_PATH, cur_dir) &&
+ !SearchPathW( cur_dir, name, exeW, buflen, buffer, NULL )) &&
+ /* not found in the working directory, try the system search path */
+ !SearchPathW( NULL, name, exeW, buflen, buffer, NULL ) &&
/* no builtin found, try native without extension in case it is a Unix app */
!SearchPathW( NULL, name, NULL, buflen, buffer, NULL )) return FALSE;
--
2.17.0
More information about the wine-devel
mailing list