From dab0cf313592ec57a56792f4eb460934c3c627c7 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 3 Dec 2002 23:28:15 +0000 Subject: [PATCH] Use COMSPEC command interpreter to run .bat files. --- scheduler/process.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/scheduler/process.c b/scheduler/process.c index bceef89d327..f8396f7bb10 100644 --- a/scheduler/process.c +++ b/scheduler/process.c @@ -1255,13 +1255,36 @@ BOOL WINAPI CreateProcessA( LPCSTR app_name, LPSTR cmd_line, LPSECURITY_ATTRIBUT inherit, flags, startup_info, info, unixdir ); break; case BINARY_UNKNOWN: - /* check for .com extension */ - if ((p = strrchr( name, '.' )) && !FILE_strcasecmp( p, ".com" )) + /* check for .com or .bat extension */ + if ((p = strrchr( name, '.' ))) { - TRACE( "starting %s as DOS binary\n", debugstr_a(name) ); - retv = create_process( hFile, name, tidy_cmdline, env, process_attr, thread_attr, - inherit, flags, startup_info, info, unixdir ); - break; + if (!FILE_strcasecmp( p, ".com" )) + { + TRACE( "starting %s as DOS binary\n", debugstr_a(name) ); + retv = create_process( hFile, name, tidy_cmdline, env, process_attr, thread_attr, + inherit, flags, startup_info, info, unixdir ); + break; + } + if (!FILE_strcasecmp( p, ".bat" )) + { + char comspec[MAX_PATH]; + if (GetEnvironmentVariableA("COMSPEC", comspec, sizeof(comspec))) + { + char *newcmdline, *q = strchr(cmd_line, ' '); + if (!q) q = ""; + if ((newcmdline = HeapAlloc( GetProcessHeap(), 0, + strlen(comspec) + strlen(name) + strlen(q) + 8))) + { + sprintf( newcmdline, "%s /c %s%s", comspec, name, q ); + TRACE( "starting %s as batch binary: %s\n", + debugstr_a(name), debugstr_a(newcmdline) ); + retv = CreateProcessA( comspec, newcmdline, process_attr, thread_attr, + inherit, flags, env, cur_dir, startup_info, info ); + HeapFree( GetProcessHeap(), 0, newcmdline ); + break; + } + } + } } /* fall through */ case BINARY_UNIX_EXE: