Index: dll/win32/shell32/iconcache.cpp =================================================================== --- dll/win32/shell32/iconcache.cpp (revision 69812) +++ dll/win32/shell32/iconcache.cpp (working copy) @@ -398,10 +398,34 @@ if ( !hiconLarge || !hiconSmall) { - WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall); - if(hiconLarge) DestroyIcon(hiconLarge); - if(hiconSmall) DestroyIcon(hiconSmall); - return INVALID_INDEX; + if ((wcscmp(PathFindExtensionW(sSourceFile), L".exe") == 0) || + (wcscmp(PathFindExtensionW(sSourceFile), L".scr") == 0)) + { + if(hiconLarge) DestroyIcon(hiconLarge); + if(hiconSmall) DestroyIcon(hiconSmall); + + hiconSmall = (HICON)LoadImageW(shell32_hInstance, + MAKEINTRESOURCEW(IDI_SHELL_EXE), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_SHARED | LR_DEFAULTCOLOR); + + hiconLarge = (HICON)LoadImageW(shell32_hInstance, + MAKEINTRESOURCEW(IDI_SHELL_EXE), + IMAGE_ICON, + GetSystemMetrics(SM_CXICON), + GetSystemMetrics(SM_CYICON), + LR_SHARED | LR_DEFAULTCOLOR); + } + else + { + WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall); + if(hiconLarge) DestroyIcon(hiconLarge); + if(hiconSmall) DestroyIcon(hiconSmall); + return INVALID_INDEX; + } + } if (0 != (dwFlags & GIL_FORSHORTCUT))