Module: wine Branch: master Commit: 5950c6af807da53fa80c53cbb308901df45fbc8a URL: http://source.winehq.org/git/wine.git/?a=commit;h=5950c6af807da53fa80c53cbb3...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Oct 27 11:22:38 2009 +0100
user32: Specify the full application path when starting builtin apps.
---
dlls/user32/user_main.c | 8 +++++--- dlls/user32/win.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index 516338c..ce55ff7 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -354,12 +354,14 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reason ) static const WCHAR forceW[] = { ' ','-','-','f','o','r','c','e',0 }; static const WCHAR shutdownW[] = { ' ','-','-','s','h','u','t','d','o','w','n',0 };
+ WCHAR app[MAX_PATH]; WCHAR cmdline[MAX_PATH + 64]; PROCESS_INFORMATION pi; STARTUPINFOW si;
- GetSystemDirectoryW( cmdline, MAX_PATH ); - lstrcatW( cmdline, winebootW ); + GetSystemDirectoryW( app, MAX_PATH - sizeof(winebootW)/sizeof(WCHAR) ); + strcatW( app, winebootW ); + strcpyW( cmdline, app );
if (flags & EWX_FORCE) lstrcatW( cmdline, killW ); else @@ -371,7 +373,7 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reason )
memset( &si, 0, sizeof si ); si.cb = sizeof si; - if (!CreateProcessW( NULL, cmdline, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi )) + if (!CreateProcessW( app, cmdline, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi )) { ERR( "Failed to run %s\n", debugstr_w(cmdline) ); return FALSE; diff --git a/dlls/user32/win.c b/dlls/user32/win.c index d6746b0..9e42ff8 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -1852,11 +1852,13 @@ HWND WINAPI GetDesktopWindow(void) if (!GetUserObjectInformationW( GetProcessWindowStation(), UOI_FLAGS, &flags, sizeof(flags), NULL ) || (flags.dwFlags & WSF_VISIBLE)) { - static const WCHAR command_line[] = {'\','e','x','p','l','o','r','e','r','.','e','x','e',' ','/','d','e','s','k','t','o','p',0}; + static const WCHAR explorer[] = {'\','e','x','p','l','o','r','e','r','.','e','x','e',0}; + static const WCHAR args[] = {' ','/','d','e','s','k','t','o','p',0}; STARTUPINFOW si; PROCESS_INFORMATION pi; - WCHAR systemdir[MAX_PATH]; - WCHAR cmdline[MAX_PATH + sizeof(command_line)/sizeof(WCHAR)]; + WCHAR windir[MAX_PATH]; + WCHAR app[MAX_PATH + sizeof(explorer)/sizeof(WCHAR)]; + WCHAR cmdline[MAX_PATH + (sizeof(explorer) + sizeof(args))/sizeof(WCHAR)];
memset( &si, 0, sizeof(si) ); si.cb = sizeof(si); @@ -1865,11 +1867,13 @@ HWND WINAPI GetDesktopWindow(void) si.hStdOutput = 0; si.hStdError = GetStdHandle( STD_ERROR_HANDLE );
- GetSystemDirectoryW( systemdir, MAX_PATH ); - lstrcpyW( cmdline, systemdir ); - lstrcatW( cmdline, command_line ); - if (CreateProcessW( NULL, cmdline, NULL, NULL, FALSE, DETACHED_PROCESS, - NULL, systemdir, &si, &pi )) + GetWindowsDirectoryW( windir, MAX_PATH ); + strcpyW( app, windir ); + strcatW( app, explorer ); + strcpyW( cmdline, app ); + strcatW( cmdline, args ); + if (CreateProcessW( app, cmdline, NULL, NULL, FALSE, DETACHED_PROCESS, + NULL, windir, &si, &pi )) { TRACE( "started explorer pid %04x tid %04x\n", pi.dwProcessId, pi.dwThreadId ); WaitForInputIdle( pi.hProcess, 10000 );