2013-01-31 70 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級別,系統可以自行更新。

讓我知道如果你需要一個更具體的例子,我會盡量寫點東西。

相關問題