代码之家  ›  专栏  ›  技术社区  ›  MysticSlayer

结束Win32进程vbscript

  •  1
  • MysticSlayer  · 技术社区  · 16 年前

    我有下面的代码来结束一个进程,但我仍然收到一个错误代码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
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   Zebra North    16 年前

    终止一个程序而“拒绝访问”是完全合法的。如果它是一个服务(我猜mssearch.exe是),那么它可能以“系统”用户的身份运行,该用户的权限甚至高于管理员帐户。

    您不能作为系统帐户登录,但您可能可以编写一个服务来管理其他服务…

        2
  •  0
  •   Tomalak    16 年前

    作为非特权用户,您只能结束您拥有的进程。在多用户环境中,这可能会让您感到不安,因为除非编写更具体的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
    
        3
  •  0
  •   MysticSlayer    16 年前

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