我有以下代码来结束进程,但我仍然收到错误代码2(拒绝访问)。

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
有帮助吗?

解决方案

获得“拒绝访问”是非常合理的。结束程序。如果它是一个服务(我猜测mssearch.exe是),那么它可能正在运行为“SYSTEM”。 user,其权限甚至高于Administrator帐户。

您无法以SYSTEM帐户登录,但您可以编写服务来管理其他服务......

其他提示

作为非特权用户,您只能结束自己拥有的流程。在多用户环境中,这可能会让您陷入困境,因为除非您编写更具体的WQL查询,否则WMI也会从其他用户返回同名的进程。

如果您的流程是服务,并且您的脚本在特权帐户下运行,则可能仍需要采用“常规路由”。停止它,例如使用 WScript.Shell 来调用 net stop sc.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

如果你看这个页面: http:/ /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx 您会看到错误代码2被拒绝访问而不是找不到文件

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top