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

非特権ユーザーとして、自分が所有するプロセスのみを終了できます。マルチユーザー環境では、より具体的なWQLクエリを作成しない限り、WMIは他のユーザーからも同じ名前のプロセスを返すため、これは足首を痛める可能性があります。

プロセスがサービスであり、スクリプトが特権アカウントで実行されている場合でも、スクリプトを停止するために「通常のルート」を使用する必要がある場合があります。たとえば、またはを使用して、またはよりエレガントに、クラスを使用しますWScript.Shellnet stopsc.exeWin32_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 に答える