ClearMyTracksByProcess 无需对话框 | WinHttp.WinHttpRequest.5.1 | MSXML2.XMLHTTP

ClearMyTracksByProcess Without Dialog | WinHttp.WinHttpRequest.5.1 | MSXML2.XMLHTTP

我有一个运行 CreateObject("MSXML2.XMLHTTP").Open "GET" 的 VBS,但是,我需要在它运行之前删除 IE11 缓存,因为 get 不断拉取网站的缓存版本,该版本在初始 get 后 1 分钟内不会过期。如果我使用 RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 会显示一个对话框,它会分散注意力并吸引注意力。

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("MSXML2.XMLHTTP")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

不更改文件缓存,初始拉取后一分钟仍会过期。

++++++++++++++++++++++++++++++++++++++++

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

oXMLHttp.responseText returns 没什么

++++++++++++++++++++++++++++++++++++++

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8", 0, True

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 264", 0, True

两者仍然随机显示弹出对话框。

为避免获得缓存响应,您可以使用 ServerXmlHttpRequest object 并设置 Cache-Control header:

Set oXMLHttp = CreateObject("Msxml2.ServerXMLHTTP")

With oXMLHttp
    .open "GET", myURL, False
    .setRequestHeader "Cache-Control", "max-age=0"
    .send
End With

它也应该与 WinHTTPRequest object:

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

根据我的经验,使用 WinHttpRequest,您甚至不需要设置 Cache-Control header,因此您只需将 MSXML2.XMLHTTP 更改为 WinHttp.WinHttpRequest.5.1 在你的代码中。不过添加 header 也没什么坏处。

这应该可以解决您在提取缓存版本时遇到的最初问题。