1

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

3 回答 3

2

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

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

于 2008-10-22T08:11:36.130 回答
0

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

如果您的进程是一项服务,并且您的脚本在特权帐户下运行,您可能仍需要采用“常规路线”来停止它,例如使用WScript.Shellto 调用net stopor 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
于 2008-10-22T08:23:30.147 回答
0

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

于 2008-10-22T08:34:28.173 回答