Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: chrome/installer/setup/install.cc

Issue 10889028: Install a user-level Start Menu shortcut for every user on system-installs through Active Setup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/installer/setup/install.h" 5 #include "chrome/installer/setup/install.h"
6 6
7 #include <shlobj.h> 7 #include <shlobj.h>
8 #include <time.h> 8 #include <time.h>
9 #include <winuser.h> 9 #include <winuser.h>
10 10
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // If the Start Menu shortcut was successfully created and |create_always|, 308 // If the Start Menu shortcut was successfully created and |create_always|,
309 // proceed to pin the Start Menu shortcut to the taskbar on Win7+. 309 // proceed to pin the Start Menu shortcut to the taskbar on Win7+.
310 VLOG(1) << "Pinning new shortcut at " << chrome_link.value() 310 VLOG(1) << "Pinning new shortcut at " << chrome_link.value()
311 << " to taskbar"; 311 << " to taskbar";
312 if (!file_util::TaskbarPinShortcutLink(chrome_link.value().c_str())) { 312 if (!file_util::TaskbarPinShortcutLink(chrome_link.value().c_str())) {
313 LOG(ERROR) << "Failed to pin shortcut to taskbar: " 313 LOG(ERROR) << "Failed to pin shortcut to taskbar: "
314 << chrome_link.value(); 314 << chrome_link.value();
315 } 315 }
316 } 316 }
317 317
318 if (create_always && installer_state.system_install()) {
319 ForceCreateUserLevelStartMenuShortcut(installer_state, product);
320 }
321
318 // Create/update uninstall link if we are not an MSI install. MSI 322 // Create/update uninstall link if we are not an MSI install. MSI
319 // installations are, for the time being, managed only through the 323 // installations are, for the time being, managed only through the
320 // Add/Remove Programs dialog. 324 // Add/Remove Programs dialog.
321 // TODO(robertshield): We could add a shortcut to msiexec /X {GUID} here. 325 // TODO(robertshield): We could add a shortcut to msiexec /X {GUID} here.
322 if (!installer_state.is_msi()) { 326 if (!installer_state.is_msi()) {
323 // Uninstall Chrome link 327 // Uninstall Chrome link
324 FilePath uninstall_link(start_menu_folder_path.Append( 328 FilePath uninstall_link(start_menu_folder_path.Append(
325 browser_dist->GetUninstallLinkName() + L".lnk")); 329 browser_dist->GetUninstallLinkName() + L".lnk"));
326 330
327 CommandLine arguments(CommandLine::NO_PROGRAM); 331 CommandLine arguments(CommandLine::NO_PROGRAM);
328 AppendUninstallCommandLineFlags(installer_state, product, &arguments); 332 AppendUninstallCommandLineFlags(installer_state, product, &arguments);
329 VLOG(1) << operation << " uninstall link at " << uninstall_link.value(); 333 VLOG(1) << operation << " uninstall link at " << uninstall_link.value();
330 if (!file_util::CreateOrUpdateShortcutLink(setup_exe.value().c_str(), 334 if (!file_util::CreateOrUpdateShortcutLink(setup_exe.value().c_str(),
331 uninstall_link.value().c_str(), NULL, 335 uninstall_link.value().c_str(), NULL,
332 arguments.GetCommandLineString().c_str(), NULL, 336 arguments.GetCommandLineString().c_str(), NULL,
333 setup_exe.value().c_str(), 0, NULL, 337 setup_exe.value().c_str(), 0, NULL,
334 create_always ? file_util::SHORTCUT_CREATE_ALWAYS : 338 create_always ? file_util::SHORTCUT_CREATE_ALWAYS :
335 file_util::SHORTCUT_NO_OPTIONS)) { 339 file_util::SHORTCUT_NO_OPTIONS)) {
336 LOG(WARNING) << operation << " uninstall link at " 340 LOG(WARNING) << operation << " uninstall link at "
337 << uninstall_link.value() << " failed."; 341 << uninstall_link.value() << " failed.";
338 } 342 }
339 } 343 }
340 } 344 }
341 345
346 void ForceCreateUserLevelStartMenuShortcut(
347 const InstallerState& installer_state,
348 const Product& product) {
349 BrowserDistribution* browser_dist = product.distribution();
350 const string16 product_name(browser_dist->GetAppShortCutName());
351 const string16 product_desc(browser_dist->GetAppDescription());
352 const FilePath chrome_exe(
353 installer_state.target_path().Append(installer::kChromeExe));
354
355 FilePath start_menu_user_level;
356 if (!PathService::Get(base::DIR_START_MENU, &start_menu_user_level)) {
357 LOG(ERROR) << "Failed to get user-level start menu path.";
358 return;
359 }
360 start_menu_user_level = start_menu_user_level.Append(product_name);
361 if (!file_util::PathExists(start_menu_user_level))
grt (UTC plus 2) 2012/08/29 17:07:06 no need for this check, as CreateDirectory does it
gab 2012/08/29 21:53:00 Done.
362 file_util::CreateDirectoryW(start_menu_user_level);
grt (UTC plus 2) 2012/08/29 17:07:06 CreateDirectoryW -> CreateDirectory
gab 2012/08/29 21:53:00 Done.
363
364 const FilePath chrome_link(
365 start_menu_user_level.Append(product_name + L".lnk"));
366
367 const uint32 options = (ShellUtil::SHORTCUT_CREATE_ALWAYS |
368 ShellUtil::SHORTCUT_DUAL_MODE);
369
370 VLOG(1) << "Creating shortcut to " << chrome_exe.value() << " at "
371 << chrome_link.value();
372 if (!ShellUtil::UpdateChromeShortcut(browser_dist, chrome_exe.value(),
373 chrome_link.value(), string16(), product_desc, chrome_exe.value(),
374 browser_dist->GetIconIndex(), options)) {
375 LOG(WARNING) << "Creating shortcut at " << chrome_link.value()
grt (UTC plus 2) 2012/08/29 17:07:06 WARNING -> ERROR?
gab 2012/08/29 21:53:00 Done.
376 << " failed.";
377 }
378 }
379
342 void CreateOrUpdateDesktopAndQuickLaunchShortcuts( 380 void CreateOrUpdateDesktopAndQuickLaunchShortcuts(
343 const InstallerState& installer_state, 381 const InstallerState& installer_state,
344 const Product& product, 382 const Product& product,
345 uint32 options) { 383 uint32 options) {
346 // TODO(tommi): Change this function to use WorkItemList. 384 // TODO(tommi): Change this function to use WorkItemList.
347 DCHECK(product.is_chrome()); 385 DCHECK(product.is_chrome());
348 386
349 // Information used for all shortcut types 387 // Information used for all shortcut types
350 BrowserDistribution* browser_dist = product.distribution(); 388 BrowserDistribution* browser_dist = product.distribution();
351 const string16 product_name(browser_dist->GetAppShortCutName()); 389 const string16 product_name(browser_dist->GetAppShortCutName());
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 installer_state.RemoveOldVersionDirectories( 584 installer_state.RemoveOldVersionDirectories(
547 new_version, 585 new_version,
548 existing_version.get(), 586 existing_version.get(),
549 install_temp_path); 587 install_temp_path);
550 } 588 }
551 589
552 return result; 590 return result;
553 } 591 }
554 592
555 } // namespace installer 593 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698