【问题标题】:VBscript HTTP Status msgbox only pops up once issueVBscript HTTP Status msgbox 只弹出一次问题
【发布时间】:2019-05-06 03:05:03
【问题描述】:

这是我正在制作的 MS-HTA 中的 VBscript 代码,它应该在每次运行时检查网络服务器的更新。

但它不起作用,它会弹出一次然后如果用户点击确定并且没有 下载新版本,即使他们保留在旧版本上,它也不会再次提示。

如果版本仍然过时,我有什么方法可以让它在每次运行时都提示? 需要是可以在 HTMLApplication MS-HTA 中工作的 VBScript。

Dim varHTTP, varBinaryString, varFileName, varLink

set objShell = CreateObject("WScript.Shell")

Set varHTTP = CreateObject("Microsoft.XMLHTTP")
Set varBinaryString = CreateObject("Adodb.Stream")

varFileName = "YoutubeDLV2.zip"
varNewFileName = "YoutubeDLV3.zip"
varLink = "https://MyURL.com/YTDL/V2/" & varFileName
varNewLink = "https://MyURL.com/YTDL/V3/" & varNewFileName
varHTTP.Open "GET", varLink, False
varHTTP.Send

CheckFile()

Sub CheckFile()
Select Case Cint(varHTTP.status)
    Case 200, 202, 302 
        'it exists
        Exit Sub
    Case Else
        'does not exist         
        msgbox "Update Found! Go to:" & vbNewLine & 
"https://MyURL.com/YTDL/" & vbNewLine & "And download latest version." & 
vbNewLine & vbNewLine & "Currently Running Version." & vbNewLine + varLink & 
vbNewLine & vbNewLine & "Newest Version:" & vbNewLine + varNewLink
End Select
End Sub

似乎是这条线引起了问题

Case 200, 202, 302 

Case 202 - 每次都会自行提示

案例 200、202、302 - 即使被拒绝也只会导致一次

案例 200 - 自己什么都不做

200 – OK (standard successful http request)
202 – Accepted (request accepted for processing, but not completed)
302 – Found (via redirection)

正如我上面所说,这段代码确实有效,但只有一次。我希望它每次都能正常工作,我不知道为什么我不能让它工作,有什么想法吗?

--- 编辑

我只是选择了批次,因为我更了解它,并使它有效。它确实依赖于 powershell 版本 5,因此无法在 Windows 7 和第三方 wget 独立 exe 中工作,但它可以工作:)

:main
cls
set version=2.0
set filename=YoutubeDLV3.zip
wget.exe --no-check-certificate https://mysite/YTDL/version.txt >nul
set /p nwstvrsn=<version.txt
set nwstvrsn=%nwstvrsn: =%
if %version% lss %nwstvrsn% goto newupdateavailable
if %version%==%nwstvrsn% goto noupdateavailable
goto main


:newupdateavailable
cls
echo.
echo Downloading Update...
echo.
wget.exe --no-check-certificate https://mysite/YTDL/V2/%filename% -O "%filename%"
ping localhost -n 2 >nul
PowerShell.exe Expand-Archive %filename% -DestinationPath %userprofile%\Downloads\
pause
exit

:noupdateavailable
cls
echo.
echo No Update Available
echo.
pause
exit

并告诉它从 hta 中运行

Sub  Window_onload

Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "VersionCheck.bat", "", , , NORMAL_WINDOW

End Sub

【问题讨论】:

  • 为什么不将其设置为Case 404并交换逻辑?
  • 404 似乎不起作用,无论哪种方式都没有提示,猜测是因为我的网站提供了一个 404 错误页面,其文件路径不像重定向到 site.com/404/,在没有文件的情况下它计数仍然有效。当显示 404 代替 mysite.com/YoutubeDLV2.zip
  • @NathanRice 的逻辑是可靠的,但似乎对我不起作用。 :(
  • 你能更新更多细节吗?为什么这不起作用?
  • varHTTP.status 会在您每次提出请求时更新,对吗?那么如果您只调用CheckFile()(并且varHTTP.Send 不在此方法中),它将如何更新?

标签: batch-file vbscript hta httpapplication


【解决方案1】:

我只是选择了批次,因为我更了解它,并使它有效。它确实依赖于 powershell 版本 5,因此无法在 Windows 7 和第三方 wget 独立 exe 中工作,但它可以工作:)

:main
cls
set version=2.0
set filename=YoutubeDLV3.zip
wget.exe --no-check-certificate https://mysite/YTDL/version.txt >nul
set /p nwstvrsn=<version.txt
set nwstvrsn=%nwstvrsn: =%
if %version% lss %nwstvrsn% goto newupdateavailable
if %version%==%nwstvrsn% goto noupdateavailable
goto main


:newupdateavailable
cls
echo.
echo Downloading Update...
echo.
wget.exe --no-check-certificate https://mysite/YTDL/V2/%filename% -O "%filename%"
ping localhost -n 2 >nul
PowerShell.exe Expand-Archive %filename% -DestinationPath %userprofile%\Downloads\
pause
exit

:noupdateavailable
cls
echo.
echo No Update Available
echo.
pause
exit

并告诉它从 hta 中运行

Sub  Window_onload

Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "VersionCheck.bat", "", , , NORMAL_WINDOW

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多