فهرست منبع

Merge pull request #5105 from sigurdm/invoke_plugin_via_cmd

On Windows invoke plugins using cmd.exe
Feng Xiao 7 سال پیش
والد
کامیت
f8cd9b0fac
1فایلهای تغییر یافته به همراه5 افزوده شده و 4 حذف شده
  1. 5 4
      src/google/protobuf/compiler/subprocess.cc

+ 5 - 4
src/google/protobuf/compiler/subprocess.cc

@@ -124,14 +124,15 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
                       << Win32ErrorMessage(GetLastError());
   }
 
-  // CreateProcess() mutates its second parameter.  WTF?
-  char* name_copy = portable_strdup(program.c_str());
+  // Invoking cmd.exe allows for '.bat' files from the path as well as '.exe'.
+  // Using a malloc'ed string because CreateProcess() can mutate its second parameter.  (WTF).
+  char *command_line =  portable_strdup(("cmd.exe /c \"" + program + "\"").c_str());
 
   // Create the process.
   PROCESS_INFORMATION process_info;
 
   if (CreateProcessA((search_mode == SEARCH_PATH) ? NULL : program.c_str(),
-                     (search_mode == SEARCH_PATH) ? name_copy : NULL,
+                     (search_mode == SEARCH_PATH) ? command_line : NULL,
                      NULL,  // process security attributes
                      NULL,  // thread security attributes
                      TRUE,  // inherit handles?
@@ -152,7 +153,7 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
 
   CloseHandleOrDie(stdin_pipe_read);
   CloseHandleOrDie(stdout_pipe_write);
-  free(name_copy);
+  free(command_line);
 }
 
 bool Subprocess::Communicate(const Message& input, Message* output,