Icon cache corruption

Windows specific questions.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Icon cache corruption

Post by deltarho[1859] »

It is a long time since my icon cache got corrupted – years in fact. I think that this is the first time on Windows 10. If memory serves, it happened once or twice on Windows 7.

I had a batch file which rebuilt the icon cache. That seemed to work, but on a Restart the corruption remained.

I then found a batch file specifically for Windows 10 which differed to the one I had.

That seemed to work, but on a Restart the corruption remained again.

That's it. I'm going to restore a system backup and go back two days.

That did not work either. The question then is: When did the corruption occur? Unless I have to, I only Restart my machine once a week – going to Sleep in between. I do a total of 10 system backups; once per day.

I then found a method using the command prompt.

Code: Select all

Copy and paste each command below one at a time into the command prompt, and press Enter after each command.
 
ie4uinit.exe -show
 
taskkill /IM explorer.exe /F
 
DEL /A /Q "%localappdata%\IconCache.db"
 
DEL /A /F /Q "%localappdata%\Microsoft\Windows\Explorer\iconcache*"
 
shutdown /r /f /t 00
 
This last command will instantly restart the computer.
That worked after a Restart and all is well again. Phew!

So if you are on Windows 10 and your icon cache gets corrupted, then the command prompt method is your best bet.
fxm
Moderator
Posts: 12133
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Icon cache corruption

Post by fxm »

I have a purely manual method to repair the icon cache file:
  • First try to "shut down" the PC without "restart" it, then power it back on.
    (only works in case the cache file is still valid, but not the current display)
    (do not "restart", otherwise the cache file will be updated from the invalid display)

    Else (corrupt cache file):
    - in 'C:\Users\...\AppData\Local', delete the 'IconCache.db' file (=> 'IconCache.db.old' for example),
    - "shut down" the PC without "restart" it,
    - power it back on (the icons should be correctly visualized again),
    - "restart" the PC to rebuild the 'IconCache.db' file.
Last edited by fxm on Oct 29, 2023 7:57, edited 1 time in total.
Reason: Rewording.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

I checked the latest bat file and cannot figure why it didn't work.

Note that in the above command prompts, there are two DELs.

I hate the little arrows on desktop shortcuts. Every time I got a Windows Update, they came back. I don't know when, but Windows Update stopped doing that. I reckon a lot of folk gave them hell. :)
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

My shortcut icons disappeared again after a Restart; I'm on Windows 10. The command prompt method above no longer worked – I got access denied on the second DEL even though the command prompt was run in admin mode and '/F' should force deletions.

I then spent a lot of time trying umpteen methods to rebuild the icon cache – none of them worked. I even removed %localappdata% and used the full path.

I have a registry tweak to stop the arrows being displayed on the icons. I had no reason to think that had become an issue.

I removed the tweak and got my icons back – now with arrows. So the tweak no longer works.

I always got the arrows back after a Windows update, until recently, so clearly Windows does not want us to remove the arrows.

I have decided to 'throw the towel in' and allow the arrows. I am not going to bother looking for a new method to stop them.

I don't understand why deleting IconCache.db works for fxm because my latest understanding is that Windows 10 does not use it.

The lesson to be learned here is, do not tweak Windows – they may work today but may not tomorrow.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

Yours truly wrote:I have a registry tweak to stop the arrows being displayed on the icons
Out of curiosity, I looked at the tweak, and it made use of shell32.dll. shell32.dll was last modified by my last Windows update, the very day my shortcut icons disappeared.

Coincidnce? Maybe, but it could be a cautionary tale to avoid using a registry tweak involving a Windows dll.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

`

Post by deltarho[1859] »

At Microsoft Community there is a question: “How to eliminate arrow on Desktop Shortcut Icons”

The question was asked on January 4, 2018 and got two responses on the same day. The initial response suggested the registry tweak that I have been using for years. The second response recommended Winaero.

I reckon the last Windows Update, 28/10/2023, caused me the issue.

The above exchange was locked on October 25, 2023 after 8,870 views.

Locked three days before a Windows Update and 5½ years after the question was asked?

Coincidence? :lol:
caseih
Posts: 2157
Joined: Feb 26, 2007 5:32

Re: Icon cache corruption

Post by caseih »

Windows 10 and 11 support symbolic links now, and explorer even is aware of them. By default they don't show the little shortcut arrow.

https://www.howtogeek.com/16226/complet ... -or-linux/
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

Thanks, caseih. I was aware of symbolic links.

However, I will stay with the arrows. I have had no issues since allowing them back.

What it boils down to is that I didn't have an icon cache corruption. What I had was a registry tweak to remove the arrows which had become broken. So the batch file to rebuild the icon cache was working, and the icons disappeared when the registry tweak was employed.

As far as I know, there are only three methods to stop the arrows displaying, but they all use the same registry tweak. It follows then that all three methods are now broken.

Microsoft has had decades to provide an option to not have arrows displayed either in the Control Panel or in Settings. I doubt that we will ever see it.

For what it is worth, I reckon that the registry tweak was originated at Redmond and sneaked out of the back door. :)
adeyblue
Posts: 300
Joined: Nov 07, 2019 20:08

Re: Icon cache corruption

Post by adeyblue »

deltarho[1859] wrote: Nov 02, 2023 19:21 As far as I know, there are only three methods to stop the arrows displaying
You could always just use the mechanisms they give you to replace them. IShellIconOverlayIdentifier

NoOverlay.bas

Code: Select all

'' 32-bit 
'' -Wl --kill-at -gen gcc -d DLL_DEBUG
'' 64-bit
'' -d DLL_DEBUG
''
'' regsvr32 NoOverlay.dll
'' Then restart explorer

#define _WIN32_WINNT &H0601
#define UNICODE
#define _UNICODE
#include "windows.bi"
#include "win/objbase.bi"
#include "win/shlobj.bi"
#include "win/shlguid.bi"
#include "crt/string.bi"
#include "crt/stdio.bi"

Dim Shared g_dllRefCount As Long
Dim Shared g_pDllPath As PWSTR
Dim Shared g_dllPathLen As size_t
Dim Shared g_interfaceKey As HKEY
Const g_iconRegKey = WStr("SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\NoShortcutIcon")
Const g_clsidRegKey= WStr("CLSID\{AF6C47F3-EB63-4BD4-A0E9-4D71104FB8F2}")
Const g_dllName = Wstr("NoShortcutIcon")
'' {AF6C47F3-EB63-4BD4-A0E9-4D71104FB8F2}
'' NoShortcutIconOverlay
Static Shared g_NullLinkIconCLSID As CLSID = TYPE(&hAF6C47F3, &hEB63, &h4BD4, {&hA0, &hE9, &h4D, &h71, &h10, &h4F, &hB8, &hF2})
Const g_NullLinkCLSIDString = WStr("{AF6C47F3-EB63-4BD4-A0E9-4D71104FB8F2}")

#ifdef DLL_DEBUG
Sub LogMessage cdecl(ByVal fmt As PCWSTR, ...)
   Dim buf as WSTRING* 2000
   Dim argList as cva_list
   cva_start(argList, fmt)
   vsnwprintf(@buf, SizeOf(buf) \ 2, fmt, argList)
   cva_end(argList)
   OutputDebugString(@buf)
end sub

Sub LogIID(ByVal iid As REFIID, ByVal when As PCWSTR)
   Dim iidStr As WSTRING * 60
   Dim iidName As WSTRING * 128
   Dim iidNameSize As DWORD = SizeOf(iidName)
   StringFromGUID2(iid, @iidStr, SizeOf(iidStr) \ 2)
   Dim regRet As Long = RegGetValue(g_interfaceKey, @iidStr, NULL, RRF_RT_REG_SZ, NULL, @iidName, @iidNameSize)
   LogMessage("NoShortcut: %s queried for iid %s", when, Iif(regRet = ERROR_SUCCESS, @iidName, @iidStr))
end sub
#else
#define LogMessage(a, ...)
#define LogIID(a, b)
#endif

Type NoShortcutIconOverlay extends Object

Private:
   As Long refCount
   
Public:
   Declare Constructor()
'' IUnknown
   Declare Virtual Function QueryInterface (BYVAL riid AS REFIID, BYVAL ppv AS PVOID PTR) AS HRESULT
   Declare Virtual Function AddRef () AS ULONG
   Declare Virtual Function Release () AS ULONG
   
   ''IShellIconOverlayIdentifier
   Declare Virtual Function IsMemberOf(ByVal pwszPath As PCWSTR, ByVal dwAttrib As DWORD) As HRESULT
   Declare Virtual Function GetOverlayInfo (ByVal pwszIconFile As PWSTR, ByVal cchMax As Long, ByVal pIndex As Long Ptr, ByVal pdwFlags As DWORD Ptr) As HRESULT
   Declare Virtual Function GetPriority (ByVal pIPriority As Long Ptr) As HRESULT
end type

Constructor NoShortcutIconOverlay()
   InterlockedIncrement(@g_dllRefCount)
   refCount = 1
end constructor

Function NoShortcutIconOverlay.QueryInterface(BYVAL riid AS REFIID, BYVAL ppv AS PVOID PTR) AS HRESULT
   If ppv = 0 Then Return E_POINTER
   Dim hr As HRESULT = E_NOINTERFACE
   LogIID(riid, __FUNCTION__)
   If IsEqualIID(riid, @IID_IShellIconOverlayIdentifier) OrElse IsEqualIID(riid, @IID_IUnknown) Then
      *ppv = @This
      AddRef()
      hr = S_OK
   end if
   Return hr
end function

Function NoShortcutIconOverlay.AddRef () AS ULONG
   Return InterlockedIncrement(@refCount)
end function

Function NoShortcutIconOverlay.Release () AS ULONG
   Dim as Long newCount = InterlockedDecrement(@refCount) 
   If newCount <= 0 Then
      Delete @This
      InterlockedDecrement(@g_dllRefCount)
   end if
   Return newCount
end function

Function NoShortcutIconOverlay.IsMemberOf(ByVal pwszPath As PCWSTR, ByVal dwAttrib As DWORD) As HRESULT
   LogMessage("NoShortcut: IsMemberOf called for %s, flags %#x", pwszPath, dwAttrib)
   Dim pathLen As size_t = wcslen(pwszPath)
   Dim hr As HRESULT = Any

   If(dwAttrib And SFGAO_LINK) OrElse ((pathLen > 4) AndAlso (_wcsicmp(pwszPath + (pathLen - 4), @WStr(".lnk")) = 0)) Then
       LogMessage("NoShortcut: Active for %s", pwszPath)
       hr = S_OK
   Else
      Dim fileInf as SHFILEINFO
      fileInf.dwAttributes = SFGAO_LINK
      If SHGetFileInfo(pwszPath, 0, @fileInf, SizeOf(fileInf), SHGFI_ATTR_SPECIFIED Or SHGFI_ATTRIBUTES) Then
         hr = IIf(fileInf.dwAttributes And SFGAO_LINK, S_OK, S_FALSE)
      Else
         hr = E_FAIL
      End If      
   End If
   Return hr
end function

Function NoShortcutIconOverlay.GetOverlayInfo (ByVal pwszIconFile As PWSTR, ByVal cchMax As Long, ByVal pIndex As Long Ptr, ByVal pdwFlags As DWORD Ptr) As HRESULT
   If pIndex = 0 OrElse pwszIconFile = 0 OrElse pdwFlags = 0 Then Return E_POINTER
   If cchMax < g_dllPathLen Then Return E_OUTOFMEMORY
   wcscpy(pwszIconFile, g_pDllPath)
   *pIndex = 0
   *pdwFlags = ISIOI_ICONFILE Or ISIOI_ICONINDEX
   LogMessage("NoShortcut: GetOverlayInfo returned %s, index: %d, flags: %#x", pwszIconFile, *pIndex, *pdwFlags)
   Return S_OK
end function

Function NoShortcutIconOverlay.GetPriority (ByVal pIPriority As Long Ptr) As HRESULT
   Dim hr As HRESULT = S_OK
   If pIPriority Then
      *pIPriority = 0
   Else
      hr = E_POINTER
   end if
   Return hr
end function

Type NoShortcutIconClassFactory extends Object
Private:
   As Long refCount
Public:
   Declare Constructor()
   '' IUnknown
   Declare Virtual Function QueryInterface (BYVAL riid AS REFIID, BYVAL ppv AS PVOID PTR) AS HRESULT
   Declare Virtual Function AddRef () AS ULONG
   Declare Virtual Function Release () AS ULONG
   
   '' IClassFactory
   DECLARE Virtual Function CreateInstance (BYVAL punk As LPUNKNOWN, ByVal riid As REFIID, ByVal ppv As PVOID Ptr) AS HRESULT
   DECLARE Virtual Function LockServer (BYVAL fLock AS Long) AS HRESULT
End Type

Constructor NoShortcutIconClassFactory()
   InterlockedIncrement(@g_dllRefCount)
   refCount = 1
end constructor

Function NoShortcutIconClassFactory.QueryInterface(BYVAL riid AS REFIID, BYVAL ppv AS PVOID PTR) AS HRESULT
   Dim hr As HRESULT = E_NOINTERFACE
   If ppv = 0 Then Return E_POINTER
   LogIID(riid, __FUNCTION__)
   If IsEqualIID(riid, @IID_IClassFactory) OrElse IsEqualIID(riid, @IID_IUnknown) Then
      *ppv = @This
      AddRef()
      hr = S_OK
   end if
   Return hr
end function

Function NoShortcutIconClassFactory.AddRef () AS ULONG
   Return InterlockedIncrement(@refCount)
end function

Function NoShortcutIconClassFactory.Release () AS ULONG
   Dim as Long newCount = InterlockedDecrement(@refCount) 
   If newCount <= 0 Then
      Delete @This
      InterlockedDecrement(@g_dllRefCount)
   end if
   Return newCount
end function

Function NoShortcutIconClassFactory.CreateInstance (BYVAL punk As LPUNKNOWN, ByVal riid As REFIID, ByVal ppv As PVOID Ptr) AS HRESULT 
   If pUnk Then Return CLASS_E_NOAGGREGATION
   Dim pOverlay As NoShortcutIconOverlay Ptr = New NoShortcutIconOverlay()
   Dim hr As HRESULT = pOverlay->QueryInterface(riid, ppv)
   pOverlay->Release()
   Return hr
end function

Function NoShortcutIconClassFactory.LockServer (BYVAL fLock AS Long) AS HRESULT
   If fLock Then 
      AddRef()
   Else
      Release()
   end if
   return S_OK
end function

Extern "Windows-MS"

Public Function DllGetClassObject (ByVal clsid As REFCLSID, ByVal iid As REFIID, ByVal ppv As PVOID Ptr) As HRESULT Export
   Dim ret As HRESULT
   LogIID(clsid, __FUNCTION__)
   If IsEqualCLSID(clsid, @g_NullLinkIconCLSID) Then
      Dim pClassFact As NoShortcutIconClassFactory Ptr = New NoShortcutIconClassFactory()
      ret = pClassFact->QueryInterface(iid, ppv)
      pClassFact->Release()
   Else
      ret = CLASS_E_CLASSNOTAVAILABLE
   end if
   Return ret
end function

Function DllCanUnloadNow () As HRESULT Export
   Return IIf(g_dllRefCount = 0, S_OK, S_FALSE)
end function

Function RegisterShortcutIcon() As BOOL
   Dim ret As BOOL
   Dim hKey As HKEY
   If RegCreateKeyEx(HKEY_LOCAL_MACHINE, g_iconRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, @hKey, NULL) = ERROR_SUCCESS Then
      LogMessage("NoShortcut: Created key %s", g_iconRegKey)
      Dim stringBytes As DWORD = wcslen(@g_NullLinkCLSIDString) * 2
      ret = IIf(RegSetValueEx(hKey, NULL, 0, REG_SZ, Cast(PBYTE, @g_NullLinkCLSIDString), stringBytes) = ERROR_SUCCESS, TRUE, FALSE)
      RegCloseKey(hKey)
   end if
   Return ret
end function

Function RegisterCLSID() As BOOL
   Dim ret As Long = 3
   Dim hClsidKey As HKEY
   If RegCreateKeyEx(HKEY_CLASSES_ROOT, g_clsidRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, @hClsidKey, NULL) = ERROR_SUCCESS Then
      ret -= 1
      LogMessage("NoShuortcut: Opened CLSID key %s", g_clsidRegKey)
      Dim stringBytes As DWORD = wcslen(@g_dllName) * 2
      '' Don't really care if this fails
      RegSetValueEx(hClsidKey, NULL, 0, REG_SZ, Cast(PBYTE, @g_dllName), stringBytes)
      Dim hInProcKey As HKEY
      If RegCreateKeyEx(hClsidKey, @WStr("InProcServer32"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, @hInProcKey, NULL) = ERROR_SUCCESS Then
         LogMessage("NoShortcut: Opened InProcServer key")
         ret -= 1
         Dim threadModel As PCWSTR = @WStr("Apartment")
         Dim stat As LSTATUS = RegSetValueEx(hInProcKey, NULL, 0, REG_SZ, Cast(PBYTE, g_pDllPath), g_dllPathLen * 2)
         stat += RegSetValueEx(hInProcKey, @WStr("ThreadingModel"), 0, REG_SZ, Cast(PBYTE, threadModel), wcslen(threadModel) * 2)
         ret -= Iif(stat = ERROR_SUCCESS, 1, 0)
         RegCloseKey(hInProcKey)
      end if
      RegCloseKey(hClsidKey)
   end if
   Return ret = 0
end function

Sub UnregisterShortcutIcon()
   RegDeleteKey(HKEY_LOCAL_MACHINE, g_iconRegKey)
end sub

Sub UnregisterCLSID()
   RegDeleteTree(HKEY_CLASSES_ROOT, g_clsidRegKey)
end sub

Function DllRegisterServer() As HRESULT Export
   Dim wowProc As BOOL
   If IsWow64Process(GetCurrentProcess(), @wowProc) AndAlso wowProc Then
      MessageBox(NULL, "NoOverlay: Must use 64-bit dll on 64-bit Windows", "NoOverlay Dll Registration", MB_OK)
      Return E_FAIL
   end if
   Dim ret As BOOL = RegisterShortcutIcon()
   If ret Then
      ret = RegisterCLSID()
      If ret = FALSE Then
         UnregisterShortcutIcon()
      end if
   end if
   Return IIf(ret, S_OK, E_FAIL)
end function

Function DllUnregisterServer() As HRESULT Export
   UnregisterShortcutIcon()
   UnregisterCLSID()
   Return S_OK
end function

End Extern

Sub CaptureDllName(ByVal hMod As HMODULE)
   Dim pathChars As DWORD = MAX_PATH
   Dim pDllPath As PWSTR = Allocate(pathChars * 2)
   Do
      Dim written As DWORD = GetModuleFileName(hMod, pDllPath, pathChars)
      If written = pathChars Then
         pathChars *= 2
         Dim pTemp As PWSTR = ReAllocate(pDllPath, pathChars * 2)
         If pTemp Then
            pDllPath = pTemp
         Else
            DeAllocate(pDllPath)
            Exit Do
         end if
      Else
            g_dllPathLen = written + 1
            g_pDllPath = pDllPath
            Exit Do
      end if
   loop
   LogMessage("NoShortcut: Dll Name is %s", g_pDllPath)
end sub

Sub FreeDllName()
   DeAllocate(g_pDllPath)
end sub

Sub ModConstructor() constructor
   Dim hMod As HMODULE = Any
   GetModuleHandleEx(_
      GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS Or GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, _
      Cast(PWSTR, @ModConstructor), _
      @hMod _
   )
   LogMessage("NoShortcut: Dll loaded at %p", hMod)
   DisableThreadLibraryCalls(hMod)
   CaptureDllName(hMod)
#ifdef DLL_DEBUG
   RegOpenKeyEx(HKEY_CLASSES_ROOT, "Interface", 0, KEY_READ, @g_interfaceKey)
#endif
end sub

Sub ModDestructor() destructor
   LogMessage("NoShortcut: Dll unloading")
   FreeDllName()
#ifdef DLL_DEBUG
   RegCloseKey(g_interfaceKey)
#endif
end sub
It looks a lot, but most of it is just COM boilerplate, the actual custom bit is less than 80 lines.


Resource.rc

Code: Select all

1 ICON DISCARDABLE "transparent.ico"
And then a transparent icon.

Or you can download the WinFBE project zip of it all with an icon here.
It works on Win7 and the version of Win11 I have. But that's from last year as it's a VM so who knows if it continues to work. I can't be bothered installing the new Win11 to find out.

If you change IsMemberOf to just
Return S_OK
it should turn off all the things that show little overlay icons (things like the offline files marker, etc), but I don't guarantee it. It might also slow things down a little bit since explorer will then paint the overlays on every file icon it sees, even if it is transparent.

If you install it and then want to change it, you have to kill explorer, overwrite the dll and then restart explorer to see the changes as it doesn't ever get unloaded. This applies to unregistering it too, unregister, restart explorer, delete dll.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

Thanks, adeyblue. GULP!

Here is another way.
Yours truly wrote:As far as I know, there are only three methods to stop the arrows displaying
There is a fourth - Ultimate Windows Tweaker 4 for Windows 10 (UWT)

This is the tweak that I have been using:

The key 'Shell Icons' did not exist so I had to create it.

In the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons we put a REG_SZ as

Name = 29
Data = %windir%\System32\shell32.dll,-50

UWT did this
Name = 29
Data = C:\ProgramData\empty.ico

How does that work? No idea.

I restored the arrows. empty.ico was not removed from C:\ProgamData.

Without using UWT I added the REG_SZ as used by UWT and saw the arrows removed on a Restart.

I thought, "OK, but I bet the arrows will be back after another Restart." They weren't and did not come back after a couple of Restarts.

This is what we do.

If you are not happy using the registry editor then execute the following reg file: Edit: (Check out next post)

Code: Select all

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons]
"29"="C:\\ProgramData\\empty.ico"
 
 
That will create 'Shell Icons' if it does not exist.

Make sure that the script ends with an empty line; otherwise it won't work. In other words, press Enter twice on typing the last line.

Put empty.ico, zip attached, in C:\ProgramData.

Now Restart.

empty.zip

Edit: I did a cold boot to give Windows every opportunity to bring back the arrows – it didn't. :)
Last edited by deltarho[1859] on Nov 03, 2023 6:09, edited 2 times in total.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

I have 'Wise Care 365' which tells me if anyone is making a change to the registry. 'Ultimate Windows Tweaker 4 for Windows 10' (UWT) was allowed to make two changes to 'shell/cmd'. I started to get paranoid and wondered if my last post would have worked had I not used UWT. So I restored a system backup that was two days old – before UWT was loaded.

I then followed my instructions above and Restarted a couple of times – no arrows. :D

Edit: I should have done this in the last post: Attached is a zipped folder. Unzip and you will find empty.ico and noarrows.reg.

Put empty.ico in C:\ProgramData and execute the reg file. Restart a couple of times to be certain all is well.

Edit: We don't need to Restart a couple of times. Run the following batch file a couple of times.

Code: Select all

taskkill /F /IM explorer.exe
start explorer.exe
exit
That will restart explorer.exe.

NoArrows.zip
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

Rather than use UWT's empty icon, I decided to create my own to avoid copyright issues. When I had finished, I compared mine with UWT's and found them to be identical. Not entirely surprising, but UWT's icon may have been special. :)

I tried adeyblue's transparent.ico, but on a second Restart the icons disappeared. However, that is a 32x32 whereas emty.ico is a 16x16; which may be relevant.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

This thread has had 150 views since the last but one post.

If you tried the last but one post, I should like to know whether it worked for you or not.

I am not looking for a 'War and Peace' response, just a simple Yes or No will suffice. :)
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

There hve been over 100 views since the 'Yes/No' request. No one may have tried the latest 'tip' in which case nobody can respond with a 'Yes/No'. However, I find that difficult to believe.

For all I know, the tip may be unique to my machine. I doubt that, but I cannot prove it.
deltarho[1859]
Posts: 4313
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: Icon cache corruption

Post by deltarho[1859] »

200 :o
Post Reply