如果你能伸出援助之手会很棒吗?
我有一个HTA文件没什么好看的,它可以逐个安装一些程序
我一直在阅读有关如何等待安装完成的几个地方 然后安装下一个程序,但对我来说也没有任何意义 他们说使用wscript.sleep会很棒,但它在HTA中不起作用吗?
我有firefox,utorrent,symantec防病毒,adobe reader,office 2003(已经与KEY一起打包) 还有其他几个。
我想找到静默安装的交换机,但如果这个代码有人愿意向我展示作品,那就不重要了......
我希望我有意义吗?
如果你可以帮助我会很棒吗?
Cheers Pavle。
答案 0 :(得分:0)
您可以在我的回答(https://stackoverflow.com/a/3742182/128427)中找到对此问题有用的内容:How to get an HTA to restart itself?
它使用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级别,系统可以自行更新。
如果您需要更具体的示例,请告诉我,我会尝试写一些内容。