2008-10-22 48 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