我试图弄清楚如何使用.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是否不适用于远程查询?
答案 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/