Знайте, когда стороннее приложение выскакивает экран ошибки
У меня есть планировщик (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); } } } }
Но иногда это возвращает процесс, который на самом деле является частью запущенного процесса с заголовком окна, но без видимого окна.