0

如果你能帮我一把就好了?

我有一个 HTA 文件没什么好看的,可以一一安装几个程序

我在几个地方一直在阅读如何等待安装完成然后安装下一个程序,但对我想要的东西没有任何意义,而且他们说使用 wscript.sleep 会很棒,但它不起作用一个 HTA 对吗?

我有 firefox、utorrent、symantec antivirus、adobe reader、office 2003(已与 KEY 打包)和其他一些。

我想找到要静默安装的开关,但如果有人愿意向我展示此代码有效,那并不重要...

我希望我有意义吗?

如果你能帮助我,那就太好了?

干杯帕维尔。

4

1 回答 1

0

您可能会在我对这个问题的回答( https://stackoverflow.com/a/3742182/128427 )中找到一些有用的东西:如何让 HTA 自行重启?

它使用 VBScript 帮助程序等待进程结束(HTA 本身),然后重新启动 HTA。您可以修改 vbscript 以等待特定进程结束(您的安装程序之一),然后将控制权返回给 HTA,HTA 将启动下一个安装程序并再次调用等待脚本。

我不认为 HTA 可以调用 WScript.Sleep 例程,但是 HTA 中有 setTimeout 和 setInterval 方法在 X 秒后调用例程,或者在每 X 秒后重复调用例程直到被取消。您可以使用它们定期检查进程是否仍在运行(使用 WMI Win32_Process,如我在其他答案中所示)。

要处理这样的项目列表,而不是使用循环遍历列表并在每个项目之后暂停,您有一个中央状态机例程,它不时调用自身以推进系统。

'!! extremely "pseudo" pseudo-code follows

sub StartSystem()
    state = "next program"
    list = list of programs to install
    AdvanceSystem() 
end sub

sub AdvanceSystem()

    if state = "next program"

        if more items in list
            start next installer
            remove from list (or increment an index)

            set state to "check program"
        else
            set state to "done"

    if state = "check program"

        use WMI to see if process is still running
        if no
            state = "next program"

    if state <> "done"
        setInterval(AdvanceSystem, 5000) ' call again in 5 seconds

end sub


' then somewhere in your HTA interface have a button to start things off
buttonClick = StartSystem()

使用这样的安排,您甚至可能不需要运行单独的 VBScript 来检查进程和睡眠。此外,通过这种增量过程,您可以将输出发送到某个地方的 DIV,以便用户可以看到进度,而在循环处理事物时,直到整个过程完成后才会显示输出。每次通过 AdvanceSystem 后,控制返回到 HTA 级别,系统可以自行更新。

如果您需要更具体的示例,请告诉我,我会尝试写一些东西。

于 2013-02-02T15:12:23.913 回答