vbs当计算机重启,用vbs实现重新启动 Internet Explorer
用vbs實(shí)現(xiàn)重新啟動(dòng) Internet Explorer
2007-03-25 00:00:00 作者:
用vbs實(shí)現(xiàn)重新啟動(dòng) Internet Explorer
問(wèn):
您好,腳本專(zhuān)家!如果未運(yùn)行其他實(shí)例,如何重新啟動(dòng)?Internet?Explorer?
--?MT
答:
您好,MT。多謝您的問(wèn)題。您知道,如今每個(gè)人都在挑剔可憐的?Internet?Explorer?的毛病(盡管大多數(shù)?Windows?用戶(hù)仍在使用?Internet?Explorer)。但現(xiàn)在有人提出了一個(gè)問(wèn)題,他想確保?Internet?Explorer?始終正常運(yùn)行。看見(jiàn)了吧,Internet?Explorer:還有人喜歡你!
盡管我們本來(lái)要為?Internet?Explorer?而感到高興的,但我們不得不承認(rèn)這個(gè)問(wèn)題使我們有些為難。畢竟,可通過(guò)多種不同的方法來(lái)解決此問(wèn)題,這取決于您是需要立即重新啟動(dòng)?Internet?Explorer?還是要等一會(huì)再啟動(dòng)它。對(duì)此問(wèn)題沉思片刻之后,我們決定按我們通常所采取的辦法去做:采用最簡(jiǎn)單的解決辦法,在本示例中,每?60?秒檢查一次是否有任何?Internet?Explorer?實(shí)例正在運(yùn)行。如果有,則腳本只返回到休眠狀態(tài),再等待?60?秒,然后重新檢查。如果沒(méi)有任何運(yùn)行的?Internet?Explorer?實(shí)例,則腳本將啟動(dòng)?Internet?Explorer?的新副本,然后休眠片刻,再等待?60?秒,之后重新檢查。
是的,這有點(diǎn)類(lèi)似于腳本專(zhuān)家一天的工作。嗯,您知道我們是什么意思嗎?不同之處就是每?60?秒即醒來(lái)一次以便干點(diǎn)什么。
以下是我們所提供的腳本:
strComputer?=?"."
Set?objWMIService?=?GetObject("winmgmts:\\"?&?strComputer?&?"\root\cimv2")
Set?objShell?=?CreateObject("Wscript.Shell")
Do?While?True
Set?colProcesses?=?objWMIService.ExecQuery?_
("Select?*?from?Win32_Process?Where?Name?=?'iexplore.exe'")
If?colProcesses.Count?=?0?Then
objShell.Run?"iexplore.exe"
End?If
Wscript.Sleep?60000
Loop
沒(méi)錯(cuò):它實(shí)質(zhì)上只是個(gè)普通的?WMI?腳本。因此,它首先連接到本地計(jì)算機(jī)上的?WMI?服務(wù)。但是該腳本與其他?WMI?腳本之間存在一個(gè)主要的不同之處。通常此時(shí)我們會(huì)說(shuō):“不過(guò),您也可以針對(duì)遠(yuǎn)程計(jì)算機(jī)運(yùn)行此腳本”。遺憾的是,這一次并非如此。從技術(shù)上講,您可以針對(duì)遠(yuǎn)程計(jì)算機(jī)運(yùn)行該腳本,但您啟動(dòng)的任何?Internet?Explorer?實(shí)例都將在不可見(jiàn)的窗口中運(yùn)行(至少在?Windows?XP?和?Windows?Server?2003?上是這樣),因此,您將無(wú)法在屏幕上看到它。這是操作系統(tǒng)中內(nèi)置的一種安全功能:遠(yuǎn)程啟動(dòng)的進(jìn)程始終在隱藏窗口中運(yùn)行。也就是說(shuō),該腳本必須在本地計(jì)算機(jī)上運(yùn)行。
注意:這個(gè)問(wèn)題有解決辦法嗎?事實(shí)上有解決辦法,盡管它要求您本地而不是遠(yuǎn)程啟動(dòng)進(jìn)程。有關(guān)如何解決該問(wèn)題的示例,請(qǐng)參閱您好,腳本專(zhuān)家!專(zhuān)欄。
連接到?WMI?服務(wù)后,我們就創(chuàng)建一個(gè)?WScript.Shell?對(duì)象的實(shí)例,我們將使用它來(lái)生成所有新的?Internet?Explorer?實(shí)例。(是的,我們本來(lái)可以使用?WMI?來(lái)實(shí)現(xiàn)此目的的,但大多數(shù)人都發(fā)現(xiàn)使用?Wscript.Shell?運(yùn)行程序要比使用?WMI?更容易。)接著我們建立一個(gè)只要?True?等于?True?時(shí)即運(yùn)行的?Do?循環(huán)。(除非哲學(xué)上有任何新的進(jìn)展,否則這就意味著腳本將永遠(yuǎn)運(yùn)行下去。要停止該腳本,需要終止腳本進(jìn)程。如果您正運(yùn)行在?CScrip?下的命令窗口中,只需按?Ctrl+C?或關(guān)閉命令窗口即可實(shí)現(xiàn)此操作,非常容易。)
那么此循環(huán)執(zhí)行什么操作?首先,我們使用以下代碼來(lái)檢索當(dāng)前在計(jì)算機(jī)上運(yùn)行的所有名為?iexplore.exe?的進(jìn)程集合:
Set?colProcesses?=?objWMIService.ExecQuery?_
("Select?*?from?Win32_Process?Where?Name?=?'iexplore.exe'")
盡管會(huì)失去懸念,但還是要與當(dāng)前在計(jì)算機(jī)上運(yùn)行的所有?Internet?Explorer?實(shí)例的集合保持一致。然后,我們檢查?Count?屬性(該屬性可告訴我們集合中的項(xiàng)數(shù))的值是否等于?0:
If?colProcesses.Count?=?0?Then
如果?Count?等于?0,則表示計(jì)算機(jī)上未運(yùn)行任何?Internet?Explorer?實(shí)例。因此,我們使用?Shell?對(duì)象和?Run?方法來(lái)啟動(dòng)一個(gè)全新的實(shí)例:
objShell.Run?"iexplore.exe"
就是這樣。接下來(lái),使用?Sleep?方法將腳本暫停?60?秒(60,000?毫秒)。60?秒之后,腳本繼續(xù)執(zhí)行,再次循環(huán)并重復(fù)該過(guò)程,直至永遠(yuǎn)。如果所需時(shí)間間隔不是?60?秒,調(diào)整該值即可。例如,下面這行代碼將每?30?秒(30,000?毫秒)進(jìn)行一次檢查:
Wscript.Sleep?30000
下面的代碼將每?10?分鐘(60,000?毫秒/每分鐘乘以?10?分鐘)運(yùn)行一次檢查:
Wscript.Sleep?600000
不可否認(rèn),該代碼僅每?10?分鐘檢查一次?Internet?Explorer?是否在工作。對(duì)于腳本專(zhuān)家來(lái)說(shuō),就沒(méi)有必要再每?10?分鐘檢查一次他們是否在工作:畢竟,有沒(méi)有腳本,您都知道該問(wèn)題的答案。
總結(jié)
以上是生活随笔為你收集整理的vbs当计算机重启,用vbs实现重新启动 Internet Explorer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 近世代数——Part2 群:基础与子群
- 下一篇: jqgrid使用