From 05aeceeb52eede7d11a1dcfd0761cc8b2e1b6a56 Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Wed, 13 Jan 2016 12:26:57 -0800 Subject: [PATCH] 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. --- atom/common/platform_util_win.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/atom/common/platform_util_win.cc b/atom/common/platform_util_win.cc index 735e974d1f..4de5224668 100644 --- a/atom/common/platform_util_win.cc +++ b/atom/common/platform_util_win.cc @@ -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(dir.value().c_str()), NULL, &dir_item, NULL); - if (FAILED(hr)) + if (FAILED(hr)) { + ui::win::OpenFolderViaShell(dir); return; + } base::win::ScopedCoMem file_item; hr = desktop->ParseDisplayName(NULL, NULL, const_cast(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(&message); if (message) LocalFree(message); + + ui::win::OpenFolderViaShell(dir); } } }