Я пытаюсь очистить кеш WinInet с помощью Win32 API - путем аннулирования записей кеша или их удаления (не имеет значения). Я не могу найти способ сделать это для всего кеша (кроме итерации по каждой записи - пример на C #, другой в VB) - это вообще возможно?
Как программно очистить кеш MSIE / WinInet?
Ответы (4)
Я почти уверен, что выполняю FindFirst / FindNextUrlCacheEntry (), тогда DeleteUrlCacheEntry () - единственный способ убедиться, что он работает во всех версиях IE.
В качестве альтернативы вы можете использовать FindFirst / FindNextUrlCacheGroup () и DeleteUrlCacheGroup () с "CACHEGROUP_FLAG_FLUSHURL_ONDELETE", но вы должны убедиться, что удалили только то, что хотите. Например, история, файлы cookie и временные интернет-файлы - все это группы кэша.
По-видимому, можно (ab) использовать панель свойств обозревателя, чтобы очистить файлы кеша, выполнив следующее:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
Попробую назвать это DLL.
Источник: http://www.vbforums.com/archive/index.php/t-440508.html, комментарий technorobbo
Не используйте метод: RunDll32.exe InetCpl.cpl, ClearMyTracksByProcess 8 Это не поддерживается Microsoft и, как было показано, нарушает работу кеша и вызывает всевозможные необычные проблемы.
FTR: поясняется точное значение аргумента (8 выше означает только временные файлы Интернета, а не файлы cookie и т. Д.), Например. на http://www.howtogeek.com/howto/windows/clear-ie7-browsing-history-from-the-command-line.
BTW: К сожалению, RunDll32 асинхронный, что делает его не идеальным для запуска раньше, например. автоматизированные веб-тесты. Кто-нибудь знает, как запустить это как блокирующий вызов, или как программно найти точное имя каталога «Temporary Internet Files», чтобы его можно было опрашивать до тех пор, пока он не станет пустым? Закодируйте его на C (он нужен на Java, мог бы сделать JNI) - действительно единственный вариант, да? ; (
PS: Как можно опубликовать ответ на существующий ответ вместо того, чтобы начинать новый ответ в stackoverflow?