From: Qian Hong qhong@codeweavers.com
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=19801 Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/kernel32/process.c | 6 +++++- programs/cmd/wcmdmain.c | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 7ac7477..85e0042 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -2206,6 +2206,7 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L
{ static const WCHAR comspecW[] = {'C','O','M','S','P','E','C',0}; + static const WCHAR cmdW[] = {'\','c','m','d','.','e','x','e',0}; static const WCHAR slashscW[] = {' ','/','s','/','c',' ',0}; static const WCHAR quotW[] = {'"',0}; WCHAR comspec[MAX_PATH]; @@ -2213,7 +2214,10 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L BOOL ret;
if (!GetEnvironmentVariableW( comspecW, comspec, ARRAY_SIZE( comspec ))) - return FALSE; + { + GetSystemDirectoryW( comspec, (sizeof(comspec) - sizeof(cmdW))/sizeof(WCHAR) ); + strcatW( comspec, cmdW ); + } if (!(newcmdline = HeapAlloc( GetProcessHeap(), 0, (strlenW(comspec) + 7 + strlenW(cmd_line) + 2) * sizeof(WCHAR)))) return FALSE; diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 7a7ee16..66a5ac0 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -2400,10 +2400,20 @@ int wmain (int argc, WCHAR *argvW[]) static const WCHAR offW[] = {'O','F','F','\0'}; static const WCHAR promptW[] = {'P','R','O','M','P','T','\0'}; static const WCHAR defaultpromptW[] = {'$','P','$','G','\0'}; + static const WCHAR comspecW[] = {'C','O','M','S','P','E','C',0}; + static const WCHAR cmdW[] = {'\','c','m','d','.','e','x','e',0}; + WCHAR comspec[MAX_PATH]; CMD_LIST *toExecute = NULL; /* Commands left to be executed */ OSVERSIONINFOW osv; char osver[50];
+ if (!GetEnvironmentVariableW(comspecW, comspec, sizeof(comspec)/sizeof(WCHAR))) + { + GetSystemDirectoryW(comspec, (sizeof(comspec) - sizeof(cmdW))/sizeof(WCHAR)); + strcatW(comspec, cmdW); + SetEnvironmentVariableW(comspecW, comspec); + } + srand(time(NULL));
/* Get the windows version being emulated */