WMIC MangementClass RemoteCommand - 确定何时完成? STDOUT?

时间:2011-09-21 15:58:40

标签: c# wmi wmic

我正在通过WMIC执行远程CMD线路命令,需要几秒钟才能运行。我正在进行Thread.Sleep(4000),然后继续......必须有一个更好的方法!是否有变量或方法可用于确定我发出的命令是否完成/状态字节?

谢谢!

我使用以下代码发出命令:

ManagementClass processTask = new ManagementClass(@"\\" + this.wmiConnection.machineName + @"\root\CIMV2", "Win32_Process", null);
        ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
        methodParams["CommandLine"] = command;
        methodParams["CurrentDirectory"] = @"C:\";

只需要弄清楚如何确定命令何时完成:)。谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,当你写这篇文章时:

ManagementClass processTask = new ManagementClass(@"\\192.168.183.100\root\CIMV2", "Win32_Process", null);
ManagementBaseObject methodParams = processTask.GetMethodParameters("Create");
methodParams["CommandLine"] = "cmd.exe";
methodParams["CurrentDirectory"] = @"C:\";

//Execute the method
ManagementBaseObject outParams = processTask.InvokeMethod("Create", methodParams, null);

您正在以同步方式启动远程进程,所以

outParams["returnvalue"]
outParams["processid"]

How To: Execute a Method中的回复代码和processId作为解释,如果您想异步运行它,可以阅读:How To: Call a Method Asynchronously

答案 1 :(得分:0)

此处发布了类似的问题:Wait for service.InvokeMethod to finish - WMI, C#

以下文档How To: Execute a MethodHow To: Call a Method Asynchronously描述了半同步和异步执行。你正在做的是半同步执行。

据我所知,这提供了有关WMI成功执行命令的位置的反馈。如果它是长时间运行的命令,例如运行安装程序,停止服务或执行批处理文件,则WMI将在安装程序启动时返回,服务被告知开始停止或批处理文件进程已启动。

要真正等待新进程退出,据我所知,您需要轮询以查看进程是否正在运行,或查询服务是否已停止。在您的情况下,根据命令,轮询进程ID。

我自己也在研究这个问题。

相关问题