Index: chrome/installer/mini_installer/mini_installer.cc |
=================================================================== |
--- chrome/installer/mini_installer/mini_installer.cc (revision 85625) |
+++ chrome/installer/mini_installer/mini_installer.cc (working copy) |
@@ -305,7 +305,43 @@ |
return ret; |
} |
+// Append any command line params passed to mini_installer to the given buffer |
+// so that they can be passed on to setup.exe. We do not return any error from |
+// this method and simply skip making any changes in case of error. |
+void AppendCommandLineFlags(CommandString* buffer) { |
+ PathString full_exe_path; |
+ size_t len = ::GetModuleFileName(NULL, full_exe_path.get(), |
+ full_exe_path.capacity()); |
+ if (!len || len >= full_exe_path.capacity()) |
+ return; |
+ const wchar_t* exe_name = GetNameFromPathExt(full_exe_path.get(), len); |
+ if (exe_name == NULL) |
+ return; |
+ |
+ int args_num; |
+ wchar_t* cmd_line = ::GetCommandLine(); |
+ wchar_t** args = ::CommandLineToArgvW(cmd_line, &args_num); |
+ if (args_num <= 0) |
+ return; |
+ |
+ const wchar_t* cmd_to_append = L""; |
+ if (!StrEndsWith(args[0], exe_name)) { |
+ // Current executable name not in the command line so just append |
+ // the whole command line. |
+ cmd_to_append = cmd_line; |
+ } else if (args_num > 1) { |
+ const wchar_t* tmp = SearchStringI(cmd_line, exe_name); |
+ tmp = SearchStringI(tmp, L" "); |
+ cmd_to_append = tmp; |
+ } |
+ |
+ buffer->append(cmd_to_append); |
+ |
+ LocalFree(args); |
+} |
+ |
+ |
// Windows defined callback used in the EnumResourceNames call. For each |
// matching resource found, the callback is invoked and at this point we write |
// it to disk. We expect resource names to start with 'chrome' or 'setup'. Any |
@@ -395,6 +431,12 @@ |
success = false; |
} |
+ // Get any command line option specified for mini_installer and pass them |
+ // on to setup.exe. This is important since switches such as |
+ // --multi-install and --chrome-frame affect where setup.exe will write |
+ // installer results for consumption by Google Update. |
+ AppendCommandLineFlags(&cmd_line); |
+ |
int exit_code = 0; |
if (success && |
(!RunProcessAndWait(NULL, cmd_line.get(), &exit_code) || |
@@ -455,42 +497,6 @@ |
return setup_path->length() > 0; |
} |
-// Append any command line params passed to mini_installer to the given buffer |
-// so that they can be passed on to setup.exe. We do not return any error from |
-// this method and simply skip making any changes in case of error. |
-void AppendCommandLineFlags(CommandString* buffer) { |
- PathString full_exe_path; |
- size_t len = ::GetModuleFileName(NULL, full_exe_path.get(), |
- full_exe_path.capacity()); |
- if (!len || len >= full_exe_path.capacity()) |
- return; |
- |
- const wchar_t* exe_name = GetNameFromPathExt(full_exe_path.get(), len); |
- if (exe_name == NULL) |
- return; |
- |
- int args_num; |
- wchar_t* cmd_line = ::GetCommandLine(); |
- wchar_t** args = ::CommandLineToArgvW(cmd_line, &args_num); |
- if (args_num <= 0) |
- return; |
- |
- const wchar_t* cmd_to_append = L""; |
- if (!StrEndsWith(args[0], exe_name)) { |
- // Current executable name not in the command line so just append |
- // the whole command line. |
- cmd_to_append = cmd_line; |
- } else if (args_num > 1) { |
- const wchar_t* tmp = SearchStringI(cmd_line, exe_name); |
- tmp = SearchStringI(tmp, L" "); |
- cmd_to_append = tmp; |
- } |
- |
- buffer->append(cmd_to_append); |
- |
- LocalFree(args); |
-} |
- |
// Executes setup.exe, waits for it to finish and returns the exit code. |
bool RunSetup(const wchar_t* archive_path, const wchar_t* setup_path, |
int* exit_code) { |