Я пытаюсь выполнить процесс на удаленном сервере из веб-приложения ASP .Net (обратите внимание, что веб-приложение находится на том же сервере, что и процессы). Код, который я запускаю, выглядит следующим образом:
ConnectionOptions conO = new ConnectionOptions();
// conO.Username = txtUser.Text;
// conO.Password = txtPassword.Text;
ManagementPath path = new ManagementPath(@"\\" + txtRemoteComputer.Text + @"\root\cimv2");
System.Management.ManagementScope oMs = new System.Management.ManagementScope(path, conO);
oMs.Connect();
ObjectGetOptions opt = new ObjectGetOptions();
ManagementClass classInstance = new ManagementClass(oMs, path, opt);
ManagementBaseObject inParams = classInstance.GetMethodParameters("Create");
inParams["CommandLine"] = txtPath.Text;
ManagementBaseObject outParams = classInstance.InvokeMethod("Create", inParams, null);
lblInfo.Text = outParams["returnValue"].ToString() + " Process ID: {0}" + outParams["processId"].ToString();
Однако я получаю следующую ошибку:
Операция недопустима из-за текущего состояния объекта.
У кого-нибудь есть лучшее решение этой проблемы?
Кстати, у меня есть следующий сценарий:
Мой клиент запускает сервер, на котором у него есть несколько приложений, которые делают много разных вещей (ведение журнала, вычисления ...). Он хочет иметь возможность отслеживать и при необходимости перезапускать эти приложения с веб-клиента (даже с его мобильного телефона).
То, что я пытаюсь выполнить с помощью этого приложения, - это завершить процесс и запустить тот же. Используя System.Diagnostics, я смог запросить процессы, которые в данный момент выполняются, но это, очевидно, не является решением, поскольку System.Diagnostics для удаленных машин может только видеть процессы, но не взаимодействовать с ними.