質問
プロセスを終了する次のコードがありますが、エラーコード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がアクセス拒否されていることがわかります
所属していません StackOverflow