【问题标题】:End win32 process vbscript结束win32进程vbscript
【发布时间】:2008-10-22 08:03:13
【问题描述】:

我有以下代码来结束进程,但我仍然收到错误代码 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

【问题讨论】:

  • IIRC 代码 2 将是“找不到文件”,而不是“拒绝访问”,即代码 5。

标签: winapi vbscript wmi


【解决方案1】:

结束一个程序得到“拒绝访问”是很合法的。如果它是一项服务(我猜是 mssearch.exe),那么它可能以“SYSTEM”用户身份运行,该用户的权限甚至高于管理员帐户。

您不能以 SYSTEM 帐户登录,但您可能会编写一个服务来管理其他服务...

【讨论】:

    【解决方案2】:

    作为非特权用户,您只能结束您拥有的进程。在多用户环境中,这可能会咬到你的脚踝,因为 WMI 也会从其他用户返回同名进程,除非你编写更具体的 WQL 查询。

    如果您的进程是服务,并且您的脚本在特权帐户下运行,您可能仍需要采取“常规路线”来停止它,例如使用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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        相关资源
        最近更新 更多