2008-10-22 47 views
1

我有以下代碼來結束進程,但我仍然收到錯誤代碼2(拒絕訪問)。結束win32進程vbscript

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'MSSEARCH.exe'") 
For each objProcess in colProcessList 
    wscript.echo objProcess.processid 
    intrc = objProcess.Terminate() 
    if intrc = 0 then wscript.echo "succesfully killed process" else wscript.echo "Could not kill process. Error code: " & intrc End if 
+0

IIRC碼2將「找不到文件」,不「拒絕訪問」,即代碼5。 – Tomalak 2008-10-22 08:12:52

回答

2

獲得「拒絕訪問」以結束程序是非常合理的。如果它是一個服務(我猜測是mssearch.exe),那麼它可能以「SYSTEM」用戶身份運行,該用戶具有比管理員帳戶更高的權限。

您無法登錄爲系統帳戶,但你可能會寫一個服務來管理其他服務...

0

作爲一個非特權用戶,你只能結束你自己的過程。在多用戶環境中,這可能會讓你陷入腳踝,因爲除非您編寫更具體的WQL查詢,否則WMI也會從其他用戶那裏返回同名的進程。

如果你的過程是一個服務,你的腳本下的特權帳戶運行,則可能仍需採取「常規路線」,以阻止它,例如使用WScript.Shell調用net stopsc.exe,或者,更優雅,使用Win32_Service類:

Set Services = objWMIService.ExecQuery _ 
       ("SELECT * FROM Win32_Service WHERE Name = '" & ServiceName & "'") 

For Each Service In Services 
    Service.StopService() 
    WSCript.Sleep 2000 ' wait for the service to terminate ' 
Next