我正在尝试使用 Win32 API 清除 WinInet 缓存 - 通过使缓存条目无效或删除它们(没关系)。我找不到对整个缓存执行此操作的任何方法(除了迭代每个条目 - C# 中的示例,VB 中的另一个示例) - 这甚至可能吗?
4 回答
显然,可以(ab)使用 Internet 选项面板通过执行以下操作来清除缓存文件:
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
将尝试将其称为 DLL。
来源:http : //www.vbforums.com/archive/index.php/t-440508.html,technorobbo 评论
我相当肯定执行 FindFirst/FindNextUrlCacheEntry() 然后 DeleteUrlCacheEntry() 是确保它适用于所有版本的 IE 的唯一方法。
或者,您可以将 FindFirst/ FindNextUrlCacheGroup()和DeleteUrlCacheGroup()与“CACHEGROUP_FLAG_FLUSHURL_ONDELETE”一起使用,但您必须确保只删除您想要的内容。例如,历史记录、cookie 和临时 Internet 文件都是缓存组。
不要使用以下方法: RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 Microsoft 不支持此方法,已显示会破坏缓存并导致各种异常问题。
FTR:参数的确切含义(上面的 8,仅表示 Internet 临时文件,而不是 Cookie 等)在http://www.howtogeek.com/howto/windows/clear-ie7-browsing-history-from上进行了解释-命令行。
顺便说一句:不幸的是,RunDll32 是异步的,这使得它不适合在自动化 Web 测试之前运行。是否有人知道如何将其作为阻塞调用运行,或者如何以编程方式找到“临时 Internet 文件”目录的确切目录名称,以便可以对其进行轮询直到为空?用 C 编码(需要用 Java,可以用 JNI)真的是唯一的选择,对吧?;(
PS:如何发布对现有答案的回复,而不是在 stackoverflow 上开始新的答案?