Доброе утро всем. Прошу помощи с некоей проблемкой, решений которой пока не могу найти. У меня есть программа запускающая эксель файлы через Process.Start(). В этом файле макрос, убирающий его на задний фон, делающий свою работу и убивающий эксель после окончания. Все это замечательно, но если при запуске эксель выдает всплывающее окно, например предупреждение о запуске макроса, либо ошибка связи.. любое всплывающее окно, программа тормозится на методе запуска (На той самой строчке Process.Start()) до тех пор пока это всплывающее окно не будет закрыто. Дабы не перклинивало всю программу, я решил делать запуск этих Эксель в отдельном потоке. Вот процедура выполняющаяся в этом отдельном потоке: Code: private void AsyncProcessStart(AutoStartElement elem, AutoStartSheduler parent) { if (File.Exists(elem.Process.StartInfo.FileName)) { elem.Process.Start(); while (!elem.Process.HasExited) { Thread.Sleep(GlParams.SlowMotion); } } else { Message message = OtherFunctions.MessageBuilder(Status.Error, string.Format("Ошибка автозапуска. файл не найден ({0}-{1})", elem.Task.Name,elem.Process.StartInfo.FileName), "AutoStart"); Logger.Log(message); } } Теперь программу не переклинивает, но поток тормозится на этой же строчке, и получить информацию для убийства ошибочного Эксель не предствляется возможным. Пробовал использовать StartInfo со значеним Code: proc.StartInfo.UseShellExecute = true; Результат тот же. Так же пробовал импортировать WinApi ShellExeceute, но он аналогично не может просто так запустить эксельку и не ждать от нее ответа. Кто нибудь сталкивался с подобной проблемой?
Наконец нашел решение. Надо запускать не сам файл, а эксель с параметром файла. Недооформленное решение выглядит так: Code: System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(); info.FileName = @"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"; info.Arguments = "\""+task.filePath+"\""; info.UseShellExecute = false; System.Diagnostics.Process proc = new Process(); proc.StartInfo = info;