2013-09-25 3 views
1
удается проанализировать

Моя цель:C# WMI запрос

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

Я получаю сообщение об ошибке "запроса не поддается синтаксическому анализу" в этой строке:
уаг Бодрствующего = 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()); 
     } 

    } 

ответ

0

Вы были опечатка в вашем WQL sentece заменить эту строку

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

этим один

string queryString = String.Format("SELECT * From WIN32_ProcessStopTrace WHERE ProcessID={0}",outParams['ProcessID']); 
+0

Спасибо @RRUZ за ответ. Просто заменил мой код на ваш, и я все еще получаю ту же проблему. Мне также пришлось добавить двойные кавычки в части outParams ["ProcessID"]. – HiTech

Смежные вопросы