質問

プロセスを終了する次のコードがありますが、エラーコード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」として実行されています。管理者アカウントよりも高い特権を持つユーザー。

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