WMI ManagementOperationObserver不能对远程框

时间:2015-08-16 00:08:29

标签: c# .net asynchronous wmi

我试图弄清楚如何使用.Net 4.5上的C#异步对远程计算机进行WMI查询。

我使用ManagementObjectSearcher类,并使用Get(ManagementOperationObserver观察者)方法;我或多或少地使用了这里的例子https://msdn.microsoft.com/en-US/library/ms257344(v=vs.80).aspx

它不起作用。

以下是我所知道的:

当我使用wbemtest连接到远程计算机并同步执行查询(SELECT * FROM Win32_Service)时,它可以工作。

当我将wbemtest设置为异步时,它也可以正常工作,因此我的工作站或目标计算机上没有配置问题,而且我的凭据工作正常。

如果我的C#代码连接到我的本地工作站,使用ManagementOperationObserver异步执行相同的查询也可以正常工作。

当我更改我的C#代码以连接到我的远程目标机器时,它不起作用。 ManagementOperationObserver上的所有事件都没有触发,我的应用程序就在那里等待。我把它放在那里几分钟没有任何反应。

我的工作站是域的一部分,而我的目标远程机器不是,如果这很重要(因为wbemtest同步/异步同时我不确定它是否重要)。

此时我不知道下一步该尝试什么。 ManagementOperationObserver是否不适用于远程查询?

2 个答案:

答案 0 :(得分:0)

你的解释是什么,如果你运行代码32b它不起作用,但在64b编译下它工作正常?因为它非常可怕。

答案 1 :(得分:0)

我正在尝试从异步调用中获取结果并仍然存在问题:代码已执行,但我没有看到最终结果。 我的代码是从WMI远程安装打印机。在Win32_Printer中,我正在使用

printer.Put(operationWatcher); 

并且在这种情况下,设置我正在监控的bool。

   private void OperationWatcher_ObjectPut(object sender, ObjectPutEventArgs e)
    {         
        if (e.Path.ClassName == "Win32_Printer")
        {
            printerSuccessfullyPut = true;
            Console.WriteLine("should be installed"); 
        }
    }

代码已正确执行,但我没有安装我的打印机。如果我进行同步通话

printer.Put(); 

已安装打印机。很奇怪。

不知道问题是否与此处提到的问题类似(关于使用ManagementEventWatcher的Start方法) http://blogs.microsoft.co.il/sasha/2012/09/20/asynchronous-wmi-queries-stay-away-from-them/