C# WMI Неразборчивый запрос

Моя цель:

  • Запустите процесс (установите приложение) на удаленной машине с параметрами
  • Дождитесь завершения процесса и сгенерируйте событие, когда он завершится.

Я получаю сообщение об ошибке "Неразборчивый запрос" в этой строке:
var watcher = manWatch.WaitForNextEvent();

У меня есть база данных примерно 2xx различных приложений, которые я могу установить с помощью этого метода. Не каждое приложение выдает эту ошибку во время установки. Некоторые из них успешны, а некоторые нет. Я действительно верю, что именно так я собираюсь получить событие. Любые идеи?

    private void StartAppAction(string PCName, string Command)
    {

        string Params = @"\\" + PCName + @"\C$\SoftwareInstall\" + Command;
        ConnectionOptions conOpt = new ConnectionOptions();
        conOpt.Impersonation = ImpersonationLevel.Impersonate;
        conOpt.Authentication = AuthenticationLevel.Default;
        conOpt.EnablePrivileges = true;

        ManagementScope manScope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", PCName), conOpt);
        manScope.Connect();

        ObjectGetOptions objGetOpt = new ObjectGetOptions();
        ManagementPath manPath = new ManagementPath("Win32_Process");
        ManagementClass manClass = new ManagementClass(manScope, manPath, objGetOpt);

        ManagementBaseObject inParams = manClass.GetMethodParameters("Create");
        inParams["CommandLine"] = Params;
        ManagementBaseObject outParams = manClass.InvokeMethod("Create", inParams, null);

        string queryString = "SELECT * From WIN32_ProcessStopTrace WHERE ProcessID= outParams['ProcessID']";
        WqlEventQuery wqlQuery = new WqlEventQuery(queryString);
        ManagementEventWatcher manWatch = new ManagementEventWatcher(@"\\" + PCName + @"\root\CIMV2", "SELECT * From WIN32_ProcessStopTrace WHERE ProcessID=" + outParams["ProcessID"]);

        var watcher = manWatch.WaitForNextEvent();

        if (watcher["ExitStatus"].ToString() == "0")
        {
            MessageBox.Show("Remote Exection Finished Succesfully with ExitCode 0");
        }
        else
        {
            MessageBox.Show("Remote Exection exited with the code of " + watcher["ExitStatus"].ToString());
        }

    }

person HiTech    schedule 25.09.2013    source источник


Ответы (1)


У вас была опечатка в предложении WQL, замените эту строку

string queryString = "SELECT * From WIN32_ProcessStopTrace WHERE ProcessID= outParams['ProcessID']";

этим

string queryString = String.Format("SELECT * From WIN32_ProcessStopTrace WHERE ProcessID={0}",outParams['ProcessID']);
person RRUZ    schedule 25.09.2013
comment
Спасибо @RRUZ за ответ. Только что заменил свой код на ваш, и у меня все та же проблема. Мне также пришлось добавить двойные кавычки в часть outParams[ProcessID]. - person HiTech; 26.09.2013