From: Vijay Kiran Kamuju Subject: [PATCH] kernel32: Consider the working directory first when launching executables with CreateProcess. Message-Id: <20190417085656.2210-1-infyquest@gmail.com> Date: Wed, 17 Apr 2019 10:56:56 +0200 From: "Erich E. Hoover" Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=23934 From: Erich E. Hoover Signed-off-by: Vijay Kiran Kamuju --- 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