WMI ManagementOperationObserver 不适用于远程框
WMI ManagementOperationObserver doesn't work against remote box
我正在尝试弄清楚如何在 .Net 4.5 上使用 C# 对远程计算机异步执行 WMI 查询。
我正在使用 ManagementObjectSearcher class,并使用 Get(ManagementOperationObserver watcher) 方法;我或多或少地使用了这里的示例 https://msdn.microsoft.com/en-US/library/ms257344(v=vs.80).aspx
没用。
这是我所知道的:
当我使用 wbemtest 连接到远程计算机并同步执行查询 (SELECT * FROM Win32_Service) 时,它可以正常工作。
当我将 wbemtest 设置为异步时,它也能正常工作,所以这不是我的工作站或目标机器上的配置问题,我的凭据工作正常。
如果我将我的 C# 代码连接到我的本地工作站,则使用 ManagementOperationObserver 异步执行相同的查询也可以正常工作。
当我更改我的 C# 代码以连接到我的远程目标计算机时,它不起作用。 None ManagementOperationObserver 上的事件曾经触发,而我的应用程序只是坐在那里等待。我把它放在那里几分钟了,什么也没发生。
我的工作站是域的一部分,而我的目标远程计算机不是域的一部分,如果这很重要的话(因为 wbemtest 都可以工作 sync/async 我不确定它是否重要)。
此时我不知道下一步该尝试什么。 ManagementOperationObserver 是否不适用于远程查询?
好的,默认情况下,Visual Studio 2013 在控制台应用程序上将 "Prefer 32bit" 设置为 true。我的工作站是 64 位;我关闭了它,现在我的远程调用可以工作了:/
你的解释是什么,如果你是 运行 编码为 32b 它不起作用,但在 64b 编译下它工作正常?因为这是相当可怕的情况。
我正在尝试自己从异步调用中获取结果,但仍然遇到问题:代码已执行,但我看不到最终结果。
我的代码正在从 WMI 远程安装打印机。在 Win32_Printer 中,我使用
printer.Put(operationWatcher);
最后,设置一个我正在监视的布尔值。
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/
我正在尝试弄清楚如何在 .Net 4.5 上使用 C# 对远程计算机异步执行 WMI 查询。
我正在使用 ManagementObjectSearcher class,并使用 Get(ManagementOperationObserver watcher) 方法;我或多或少地使用了这里的示例 https://msdn.microsoft.com/en-US/library/ms257344(v=vs.80).aspx
没用。
这是我所知道的:
当我使用 wbemtest 连接到远程计算机并同步执行查询 (SELECT * FROM Win32_Service) 时,它可以正常工作。
当我将 wbemtest 设置为异步时,它也能正常工作,所以这不是我的工作站或目标机器上的配置问题,我的凭据工作正常。
如果我将我的 C# 代码连接到我的本地工作站,则使用 ManagementOperationObserver 异步执行相同的查询也可以正常工作。
当我更改我的 C# 代码以连接到我的远程目标计算机时,它不起作用。 None ManagementOperationObserver 上的事件曾经触发,而我的应用程序只是坐在那里等待。我把它放在那里几分钟了,什么也没发生。
我的工作站是域的一部分,而我的目标远程计算机不是域的一部分,如果这很重要的话(因为 wbemtest 都可以工作 sync/async 我不确定它是否重要)。
此时我不知道下一步该尝试什么。 ManagementOperationObserver 是否不适用于远程查询?
好的,默认情况下,Visual Studio 2013 在控制台应用程序上将 "Prefer 32bit" 设置为 true。我的工作站是 64 位;我关闭了它,现在我的远程调用可以工作了:/
你的解释是什么,如果你是 运行 编码为 32b 它不起作用,但在 64b 编译下它工作正常?因为这是相当可怕的情况。
我正在尝试自己从异步调用中获取结果,但仍然遇到问题:代码已执行,但我看不到最终结果。 我的代码正在从 WMI 远程安装打印机。在 Win32_Printer 中,我使用
printer.Put(operationWatcher);
最后,设置一个我正在监视的布尔值。
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/