shell32: Supply a module name to CreateProcess (try 5)
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Wed Mar 12 21:55:06 CDT 2014
Hi,
Corrected the accidental line being removed.
Changelog:
shell32: Supply a module name to CreateProcess
Best Regards
Alistair Leslie-Hughes
-------------- next part --------------
>From 28383dbd3cc20dd837944db71f0dd378823077af Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Sat, 22 Feb 2014 15:52:56 +1100
Subject: [PATCH] Supply a module name to CreateProcess
To: wine-patches <wine-patches at winehq.org>
---
dlls/shell32/shlexec.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
index 39d640a..33d9a1d 100644
--- a/dlls/shell32/shlexec.c
+++ b/dlls/shell32/shlexec.c
@@ -311,10 +311,10 @@ static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
STARTUPINFOW startup;
PROCESS_INFORMATION info;
UINT_PTR retval = SE_ERR_NOASSOC;
- UINT gcdret = 0;
- WCHAR curdir[MAX_PATH];
DWORD dwCreationFlags;
const WCHAR *lpDirectory = NULL;
+ WCHAR module_path[MAX_PATH] = {0};
+ HINSTANCE findexec;
TRACE("Execute %s from directory %s\n", debugstr_w(lpCmd), debugstr_w(psei->lpDirectory));
@@ -327,12 +327,13 @@ static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
lpDirectory = psei->lpDirectory;
}
- /* ShellExecute specifies the command from psei->lpDirectory
- * if present. Not from the current dir as CreateProcess does */
- if( lpDirectory )
- if( ( gcdret = GetCurrentDirectoryW( MAX_PATH, curdir)))
- if( !SetCurrentDirectoryW( lpDirectory))
- ERR("cannot set directory %s\n", debugstr_w(lpDirectory));
+ findexec = FindExecutableW(psei->lpFile, lpDirectory, module_path);
+ if(!findexec)
+ {
+ WARN("Executable not found\n");
+ return ERROR_FILE_NOT_FOUND;
+ }
+
ZeroMemory(&startup,sizeof(STARTUPINFOW));
startup.cb = sizeof(STARTUPINFOW);
startup.dwFlags = STARTF_USESHOWWINDOW;
@@ -340,7 +341,7 @@ static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
dwCreationFlags = CREATE_UNICODE_ENVIRONMENT;
if (psei->fMask & SEE_MASK_NO_CONSOLE)
dwCreationFlags |= CREATE_NEW_CONSOLE;
- if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, dwCreationFlags, env,
+ if (CreateProcessW(module_path, (LPWSTR)lpCmd, NULL, NULL, FALSE, dwCreationFlags, env,
lpDirectory, &startup, &info))
{
/* Give 30 seconds to the app to come up, if desired. Probably only needed
@@ -364,9 +365,6 @@ static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
TRACE("returning %lu\n", retval);
psei_out->hInstApp = (HINSTANCE)retval;
- if( gcdret )
- if( !SetCurrentDirectoryW( curdir))
- ERR("cannot return to directory %s\n", debugstr_w(curdir));
return retval;
}
--
1.8.3.2
More information about the wine-patches
mailing list