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