shell32: Supply a module name to CreateProcess (try 5)
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Fri Mar 14 03:52:10 CDT 2014
Hi,
Correct for tests.
Changelog:
shell32: Supply a module name to CreateProcess
Best Regards
Alistair Leslie-Hughes
-------------- next part --------------
>From a41647a866322b315aafb923eab5f55640917f0b 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 | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
index 39d640a..284f6c6 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};
+ WCHAR *p = NULL;
TRACE("Execute %s from directory %s\n", debugstr_w(lpCmd), debugstr_w(psei->lpDirectory));
@@ -327,12 +327,12 @@ 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));
+ if(lpDirectory)
+ {
+ PathCombineW(module_path, psei->lpDirectory, psei->lpFile);
+ p = module_path;
+ }
+
ZeroMemory(&startup,sizeof(STARTUPINFOW));
startup.cb = sizeof(STARTUPINFOW);
startup.dwFlags = STARTF_USESHOWWINDOW;
@@ -340,7 +340,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(p, (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 +364,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