WMIC MangementClass RemoteCommand - определить, когда он закончится? STDOUT? - PullRequest
1 голос
/ 21 сентября 2011

Я выполняю команду удаленной линии CMD через WMIC, для запуска которой требуется несколько секунд.В настоящее время я делаю 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 ]

1 голос
/ 12 декабря 2011

В моем понимании, когда вы пишете это:

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"]

Передаст код возврата и processId, как описано в Как: выполнить метод , если вы хотите запустить его асинхронно, вы можете прочитать это: Как: вызвать метод асинхронно .

0 голосов
/ 23 апреля 2013

Здесь размещен похожий вопрос: Ожидание завершения service.InvokeMethod - WMI, C #

Следующая документация Как: выполнить метод и Как: вызывать метод асинхронно описывает полусинхронное и асинхронное выполнение.То, что вы делаете, это полусинхронное выполнение.

Насколько я могу судить, это обеспечивает обратную связь о том, где WMI успешно выполнил команду.Если это длительная команда, такая как запуск установщика, остановка службы или выполнение пакетного файла, WMI вернется, когда установщик запустится, службе будет приказано остановиться или начнется процесс пакетного файла.

Чтобы действительно дождаться завершения нового процесса, насколько я могу судить, вам нужно будет опросить, запущен ли процесс, или запросить, остановлена ​​ли служба.В вашем случае, в зависимости от команды, опросите идентификатор процесса.

Я тоже все еще в этом разбираюсь.

...