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 也没什么坏处。
这应该可以解决您在提取缓存版本时遇到的最初问题。
我有一个运行 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 也没什么坏处。
这应该可以解决您在提取缓存版本时遇到的最初问题。