2

私のユーザーは管理者グループに属しています。このコードを使用してプロセスを強制終了するために、.NET WMI API (System.Management) を使用しています。

var scope = new ManagementScope("\root\cimv2");
scope.Connect();
var query = new ObjectQuery(
    string.Format("Select * from Win32_Process Where ProcessID = {0}",
        processId));
var searcher = new ManagementObjectSearcher(scope, query);
var coll = searcher.Get().GetEnumerator();
coll.MoveNext();
var mgmtObj = (ManagementObject)coll.Current;
var ret = (uint) mgmtObj.InvokeMethod("Terminate");
// ret == 2 here, meaning "Access Denied"

プロセスの強制終了に失敗し、2( Access Denied) を返しています。ただし、次を使用する場合:

Process.Start("cmd", string.Format("/c \"taskkill /f /pid {0}\"", processId));

プロセスは強制終了されます。(ただし、省略し/fた場合は失敗します)。

WMI を使用してプロセスを終了する方法はありますか?

編集: http://msdn.microsoft.com/en-us/library/windows/desktop/aa393907(v=vs.85).aspxで以下を見つけました :

所有していないプロセスを終了するには、SeDebugPrivilege 特権を有効にします。

このページには VBScript コードが含まれていますが、これを C# で行うにはどうすればよいでしょうか?

4

1 に答える 1