5ilverFox Ответов: 1

Знайте, когда стороннее приложение выскакивает экран ошибки


У меня есть планировщик (C#), который выполняет сторонние приложения, используя приведенный ниже метод. Иногда стороннее приложение выскакивает окно ошибки, и все застревает, пока кто-то не признает ошибку. Я хочу знать, есть ли способ увидеть в C#, когда это произойдет.

private Process Shell(string AppName, string Arguments, ProcessWindowStyle WindowStyle)
{
   if (!File.Exists(AppName.Replace("\"", "")))
   {
      globError = "Executable: " + AppName + " not found!";
      return null;
   }
   procError = "";
   ProcessStartInfo startInfo = new ProcessStartInfo(AppName);
   startInfo.WindowStyle = WindowStyle;
   startInfo.Arguments = Arguments;
   Process process = new Process();
   process.StartInfo.UseShellExecute = false;
   process.StartInfo.RedirectStandardError = true;
   process.StartInfo = startInfo;
   try
   {
      process.Start();
      return process;
   }
   catch (Exception ex)
   {
      procError = ex.Message;
      return process;
   }
}


Что я уже пробовал:

foreach (Process proc in Process.GetProcesses())
{
   if (thisID > 0 && proc.Id != thisID && proc.Id != ExecutedProcess.Id)
   {
      //Not the process we started or the scheduler process
      if (proc.MainWindowTitle.Length > 8 && ExecutedProcess.MainWindowTitle.Length > 8)
      {
         if (proc.MainWindowTitle.Substring(0, 8) == ExecutedProcess.MainWindowTitle.Substring(0, 8))
         {
            //Another window starting with the same title
            msg = "Another: ID = " + proc.Id.ToString() + " - " + proc.MainWindowTitle;
            WriteLog(CurrTask, msg);
            //Restart(ExecutedProcess, CurrTask, "Error: Another window found - restarting myself", proc);
         }
      }
   }
}

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

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Проблема в том, что вы должны постоянно опрашивать окна. Это уводит вас от возможности получить данные из результата.

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

Или, если у вас есть контроль над кодом этого приложения, либо удалите диалоги ошибок, либо добавьте поддержку беззвучного переключателя.