用vbs實(shí)現(xiàn)重新啟動(dòng) Internet Explorer
更新時(shí)間:2007年03月25日 00:00:00 作者:
問(wèn):
您好,腳本專(zhuān)家!如果未運(yùn)行其他實(shí)例,如何重新啟動(dòng) Internet Explorer?
-- MT
答:
您好,MT。多謝您的問(wèn)題。您知道,如今每個(gè)人都在挑剔可憐的 Internet Explorer 的毛?。ūM管大多數(shù) Windows 用戶仍在使用 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)題的答案。
您好,腳本專(zhuān)家!如果未運(yùn)行其他實(shí)例,如何重新啟動(dòng) Internet Explorer?
-- MT
答:
您好,MT。多謝您的問(wèn)題。您知道,如今每個(gè)人都在挑剔可憐的 Internet Explorer 的毛?。ūM管大多數(shù) Windows 用戶仍在使用 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)什么。
以下是我們所提供的腳本:
復(fù)制代碼 代碼如下:
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)題的答案。
相關(guān)文章
vbs 批量修改文件,bat 批處理文件調(diào)用執(zhí)行vbs,并在cmd窗口打印返回值(vbs運(yùn)行結(jié)果)
使用vbs 腳本對(duì)工作目錄下的字符串進(jìn)行替換并統(tǒng)計(jì)被修改的文件數(shù)主調(diào)的批處理方法將捕捉該vbs腳本運(yùn)行后的結(jié)果并打印在cmd窗口。2011-09-09vbs AD日志開(kāi)啟腳本nableKerbLog的腳本
AD日志開(kāi)啟腳本2008-06-06用VBS可執(zhí)行程序+Xmlhttp下載備份網(wǎng)上文件的代碼
用VBS可執(zhí)行程序+Xmlhttp下載備份網(wǎng)上文件的代碼...2007-08-08視頻轉(zhuǎn)換大師WinMPG Video Convert 6.63
視頻轉(zhuǎn)換大師WinMPG Video Convert 6.63...2007-04-04VBS教程:函數(shù)-IsNumeric 函數(shù)
VBS教程:函數(shù)-IsNumeric 函數(shù)...2006-11-11查詢(xún)電腦開(kāi)關(guān)機(jī)時(shí)間的vbs代碼
這篇文章主要介紹了查詢(xún)電腦開(kāi)關(guān)機(jī)時(shí)間的vbs代碼,需要的朋友可以參考下2016-12-12利用WScript.Shell對(duì)象隱藏cmd命令行運(yùn)行框的實(shí)現(xiàn)代碼
利用WScript.Shell對(duì)象隱藏cmd命令行運(yùn)行2009-12-12