2013-01-31 45 views
0

如果你能给我一只很棒的手?HTA - VBScript - 安装程序,但等待安装完成

我有一个HTA文件没有什么花哨的安装由一个

我已经在如何等待安装一些地方已经阅读一些程序一个完成 再安装下一个程序,但没有使感觉我想要什么,也 他们说要使用wscript.sleep,这将是伟大的,但它不适用于HTA的权利?

我有firefox,utorrent,赛门铁克杀毒软件,Adobe阅读器,office 2003(已与KEY打包) 和其他一些。

我想找到开关静默安装但那如果这个代码有人愿意展示我的作品并不重要......

我希望我有意义吗?

如果你能帮助我,这将是伟大的?

Cheers Pavle。

+1

即使在浏览器控件中,您也应该可以使用CreateObject(“WScript.Shell”)创建shell对象。从该对象中,您可以访问Run,Exec或ShellExecute方法。就运行这些软件包而言,您需要咨询各个供应商。如果它们是MSI软件包,则使用msiexec.exe和/ qn!参数。 –

回答

0

您可能会发现这个问题的东西在我的答案(https://stackoverflow.com/a/3742182/128427)有用:How to get an HTA to restart itself?

它使用一个VBScript帮手等待进程结束(在HTA本身)然后重新启动HTA。您可以修改vbscript而不是等待特定过程结束(您的一个安装程序),然后将控制权返回给启动下一个安装程序并再次调用等待脚本的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级别,系统可以自行更新。

让我知道如果你需要一个更具体的例子,我会尽量写点东西。

相关问题