【问题标题】:Getting InvalidOperationException while calling GetOwner调用 GetOwner 时出现 InvalidOperationException
【发布时间】:2012-08-04 19:39:08
【问题描述】:

在以下代码中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Diagnostics;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string javaProcWql = string.Format("SELECT ProcessId, Name, CommandLine FROM Win32_Process WHERE Name = '{0}' AND CommandLine LIKE '%{1}%'", "firefox.exe", "firefox");
            ManagementObjectSearcher mos = new ManagementObjectSearcher(javaProcWql);
            foreach (ManagementObject mo in mos.Get())
            {
                Console.WriteLine(mo["ProcessId"]);
                string[] userinfo = new string[2];
                mo.InvokeMethod("GetOwner", (object[])userinfo);
                Console.WriteLine("ha ha --> " + userinfo[1] + "\\" + userinfo[0]);
            }
        }
    }
}

我收到InvalidOperationException,消息和异常是

“由于对象的当前状态,操作无效”

这里有什么问题?

【问题讨论】:

  • 你有 InnerException 吗?
  • 不,没有 InnerException。

标签: c# .net wmi wmi-query


【解决方案1】:

我找到了解决方案。查询应该是这样的:

string.format( "SELECT * FROM Win32_Process WHERE Name = '{0}' AND CommandLine LIKE '%{1}%'", "firefox.exe", "firefox" )

我的解释是猜测,因为我不是 Windows 或 .NET 编程方面的专家。在原始查询(见问题)中,我选择了字段,但通过指定 * 我选择了对象,因此我可以调用它们的方法。

【讨论】:

    【解决方案2】:

    GetOwner 方法需要处理字段。

    添加句柄字段以选择语句:

    SELECT Handle, ProcessId, Name, CommandLine FROM Win32_Process where ...
    

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多