Index: chrome/installer/util/shell_util.cc |
=================================================================== |
--- chrome/installer/util/shell_util.cc (revision 157679) |
+++ chrome/installer/util/shell_util.cc (working copy) |
@@ -1098,15 +1098,43 @@ |
} |
bool ShellUtil::GetDesktopPath(bool system_level, FilePath* path) { |
- int dir_key = system_level ? base::DIR_COMMON_DESKTOP : |
- base::DIR_USER_DESKTOP; |
- return PathService::Get(dir_key, path); |
+ wchar_t desktop[MAX_PATH]; |
+ int dir = system_level ? CSIDL_COMMON_DESKTOPDIRECTORY : |
+ CSIDL_DESKTOPDIRECTORY; |
+ if (FAILED(SHGetFolderPath(NULL, dir, NULL, SHGFP_TYPE_CURRENT, desktop))) |
+ return false; |
+ *path = FilePath(desktop); |
+ return true; |
} |
bool ShellUtil::GetQuickLaunchPath(bool system_level, FilePath* path) { |
- int dir_key = system_level ? base::DIR_DEFAULT_USER_QUICK_LAUNCH : |
- base::DIR_USER_QUICK_LAUNCH; |
- return PathService::Get(dir_key, path); |
+ if (system_level) { |
+ wchar_t qlaunch[MAX_PATH]; |
+ // We are accessing GetDefaultUserProfileDirectory this way so that we do |
+ // not have to declare dependency to Userenv.lib for chrome.exe |
+ typedef BOOL (WINAPI *PROFILE_FUNC)(LPWSTR, LPDWORD); |
+ HMODULE module = LoadLibrary(L"Userenv.dll"); |
+ PROFILE_FUNC p = reinterpret_cast<PROFILE_FUNC>(GetProcAddress(module, |
+ "GetDefaultUserProfileDirectoryW")); |
+ DWORD size = _countof(qlaunch); |
+ if ((p == NULL) || ((p)(qlaunch, &size) != TRUE)) |
+ return false; |
+ *path = FilePath(qlaunch); |
+ if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
+ *path = path->AppendASCII("AppData"); |
+ *path = path->AppendASCII("Roaming"); |
+ } else { |
+ *path = path->AppendASCII("Application Data"); |
+ } |
+ } else { |
+ if (!PathService::Get(base::DIR_APP_DATA, path)) { |
+ return false; |
+ } |
+ } |
+ *path = path->AppendASCII("Microsoft"); |
+ *path = path->AppendASCII("Internet Explorer"); |
+ *path = path->AppendASCII("Quick Launch"); |
+ return true; |
} |
void ShellUtil::GetRegisteredBrowsers( |