You are currently offline, waiting for your internet to reconnect

Your browser is out-of-date

You need to update your browser to use the site.

Update to the latest version of Internet Explorer

How To Clear Cache When Your Application Hosts a WebBrowser Control

Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
When your application hosts a WebBrowser control, there may be a need to clear the cache programmatically. This feature is not available through the interfaces of the WebBrowser control. This article explains how to use WinInet API functions to clear the cache directly.
More information
Use WinInet API FindFirstURLCacheEntry to find the first cache entry and use FindNextUrlCacheEntry to enumerate through the cache. Use DeleteUrlCacheEntry to delete each entry.

Note that FindFirstUrlCacheGroup, FindNextUrlCacheGroup, and DeleteUrlCacheGroup are used in the following example. These API functions have only became available with Internet Explorer 5, so proper checking as shown is needed to prevent errors.

The following steps show you how to use the WinInet API in Visual Basic to clear all the files in the cache.

  1. Create a new Visual Basic standard EXE project.
  2. Create a command button under form1.
  3. Paste the following code in the module of form1:
    Option ExplicitPrivate Declare Function FindFirstUrlCacheGroup Lib "wininet.dll" ( _    ByVal dwFlags As Long, _    ByVal dwFilter As Long, _    ByRef lpSearchCondition As Long, _    ByVal dwSearchCondition As Long, _    ByRef lpGroupId As Date, _    ByRef lpReserved As Long) As LongPrivate Declare Function FindNextUrlCacheGroup Lib "wininet.dll" ( _    ByVal hFind As Long, _    ByRef lpGroupId As Date, _    ByRef lpReserved As Long) As Long    Private Declare Function DeleteUrlCacheGroup Lib "wininet.dll" ( _    ByVal sGroupID As Date, _    ByVal dwFlags As Long, _    ByRef lpReserved As Long) As Long    Private Declare Function FindFirstUrlCacheEntry Lib "wininet.dll" Alias "FindFirstUrlCacheEntryA" ( _    ByVal lpszUrlSearchPattern As String, _    ByRef lpFirstCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _    ByRef lpdwFirstCacheEntryInfoBufferSize As Long) As Long    Private Type INTERNET_CACHE_ENTRY_INFO    dwStructSize As Long    szRestOfData(1024) As LongEnd TypePrivate Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" ( _    ByVal lpszUrlName As Long) As LongPrivate Declare Function FindNextUrlCacheEntry Lib "wininet.dll" Alias "FindNextUrlCacheEntryA" ( _    ByVal hEnumHandle As Long, _    ByRef lpNextCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _    ByRef lpdwNextCacheEntryInfoBufferSize As Long) As LongPrivate Const CACHGROUP_SEARCH_ALL = &H0Private Const ERROR_NO_MORE_FILES = 18Private Const ERROR_NO_MORE_ITEMS = 259Private Const CACHEGROUP_FLAG_FLUSHURL_ONDELETE = &H2Private Const BUFFERSIZE = 2048Private Sub Command1_Click()    Dim sGroupID As Date    Dim hGroup As Long    Dim hFile As Long    Dim sEntryInfo As INTERNET_CACHE_ENTRY_INFO    Dim iSize As Long            On Error Resume Next        ' Delete the groups    hGroup = FindFirstUrlCacheGroup(0, 0, 0, 0, sGroupID, 0)        ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented    If Err.Number <> 453 Then        If (hGroup = 0) And (Err.LastDllError <> 2) Then            MsgBox "An error occurred enumerating the cache groups" & Err.LastDllError            Exit Sub        End If    Else        Err.Clear    End If        If (hGroup <> 0) Then        'we succeeded in finding the first cache group.. enumerate and        'delete        Do            If (0 = DeleteUrlCacheGroup(sGroupID, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, 0)) Then                              ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented               If Err.Number <> 453 Then                 MsgBox "Error deleting cache group " & Err.LastDllError                 Exit Sub               Else                  Err.Clear               End If            End If            iSize = BUFFERSIZE            If (0 = FindNextUrlCacheGroup(hGroup, sGroupID, iSize)) And (Err.LastDllError <> 2) Then                MsgBox "Error finding next url cache group! - " & Err.LastDllError            End If        Loop Until Err.LastDllError = 2    End If    ' Delete the files    sEntryInfo.dwStructSize = 80    iSize = BUFFERSIZE    hFile = FindFirstUrlCacheEntry(0, sEntryInfo, iSize)    If (hFile = 0) Then        If (Err.LastDllError = ERROR_NO_MORE_ITEMS) Then            GoTo done        End If        MsgBox "ERROR: FindFirstUrlCacheEntry - " & Err.LastDllError        Exit Sub    End If    Do        If (0 = DeleteUrlCacheEntry(sEntryInfo.szRestOfData(0))) _            And (Err.LastDllError <> 2) Then            Err.Clear        End If        iSize = BUFFERSIZE        If (0 = FindNextUrlCacheEntry(hFile, sEntryInfo, iSize)) And (Err.LastDllError <> ERROR_NO_MORE_ITEMS) Then            MsgBox "Error:  Unable to find the next cache entry - " & Err.LastDllError            Exit Sub        End If    Loop Until Err.LastDllError = ERROR_NO_MORE_ITEMSdone:    MsgBox "cache cleared"    Command1.Enabled = TrueEnd Sub 					
  4. Run your project and click Command1. The cache in your computer will be cleared.
For more information about the syntax of the WinInet caching function, see the following Microsoft MSDN Online Web Workshop site: For more information about developing Web-based solutions for Microsoft Internet Explorer, visit the following Microsoft Web sites:

Article ID: 262110 - Last Review: 06/19/2014 07:39:00 - Revision: 4.0

  • kbcaching kbhowto kbsbnworkshop kbwebbrowser KB262110