Always fall back to OpenFolderViaShell when trying to reveal a file
We should always fallback to OpenFolderViaShell when revealing a file fails, since this API seems to be highly subject to Random Bad Things happening to you.
This commit is contained in:
parent
d195cc3796
commit
05aeceeb52
1 changed files with 10 additions and 4 deletions
|
@ -238,7 +238,7 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
|||
(GetProcAddress(shell32_base, "SHOpenFolderAndSelectItems"));
|
||||
}
|
||||
if (!open_folder_and_select_itemsPtr) {
|
||||
ShellExecute(NULL, L"open", dir.value().c_str(), NULL, NULL, SW_SHOW);
|
||||
ui::win::OpenFolderViaShell(dir);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -251,15 +251,19 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
|||
hr = desktop->ParseDisplayName(NULL, NULL,
|
||||
const_cast<wchar_t *>(dir.value().c_str()),
|
||||
NULL, &dir_item, NULL);
|
||||
if (FAILED(hr))
|
||||
if (FAILED(hr)) {
|
||||
ui::win::OpenFolderViaShell(dir);
|
||||
return;
|
||||
}
|
||||
|
||||
base::win::ScopedCoMem<ITEMIDLIST> file_item;
|
||||
hr = desktop->ParseDisplayName(NULL, NULL,
|
||||
const_cast<wchar_t *>(full_path.value().c_str()),
|
||||
NULL, &file_item, NULL);
|
||||
if (FAILED(hr))
|
||||
if (FAILED(hr)) {
|
||||
ui::win::OpenFolderViaShell(dir);
|
||||
return;
|
||||
}
|
||||
|
||||
const ITEMIDLIST* highlight[] = { file_item };
|
||||
|
||||
|
@ -271,7 +275,7 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
|||
// found" even though the file is there. In these cases, ShellExecute()
|
||||
// seems to work as a fallback (although it won't select the file).
|
||||
if (hr == ERROR_FILE_NOT_FOUND) {
|
||||
ShellExecute(NULL, L"open", dir.value().c_str(), NULL, NULL, SW_SHOW);
|
||||
ui::win::OpenFolderViaShell(dir);
|
||||
} else {
|
||||
LPTSTR message = NULL;
|
||||
DWORD message_length = FormatMessage(
|
||||
|
@ -284,6 +288,8 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
|||
<< " " << reinterpret_cast<LPTSTR>(&message);
|
||||
if (message)
|
||||
LocalFree(message);
|
||||
|
||||
ui::win::OpenFolderViaShell(dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue