sfxhorse
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Отдельная функция формирует файл (в рассматриваемом случае документ Word) и возвращает полный путь к этому файлу. Пытаюсь открыть файл через Process.Start(), но на отдельных машинах файл не открывается, более того экземпляров процессов winword в диспетчере задач не видно и исполняющая среда молчит (т.е. ни эксепшенов обработанных мною, ни эксепшенов провалившихся до уровня исполняющей среды не возникает). Понимаю, что реализация местами кривовата, но все же почему ??: Идеи у кого-нибудь есть? P.s. изменение переменной среды %TMP% на C:\Temp эффекта не дает. Код: try { reportCreationThread = System.Threading.Thread.CurrentThread; string tempDir = Environment.GetEnvironmentVariable("TMP"); tempDir = (tempDir == "" || tempDir == null) ? Application.StartupPath : tempDir; string fName = this.targetReport.CreateReport(DBConnection, Application.StartupPath, tempDir); CreatedReportFiles.Add(fName); var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = fName; var wellStarted = proc.Start(); if (targetReport.PostCreationAction != null) { /* * будет ждать успешного завершения процесса, если его удалось запустить. * Процесс не сможет корректно запуститься, если: * - уже открыт экземпляр приложения (для Ворда) * Также придется ждать завершения приложения, а не закрытия документа */ if (wellStarted) { this.SetProgressInfo(new ProgressInfo(-1, "Ожидание завершения работы пользователя с отчетом...")); proc.WaitForExit(); } var re = new ReportPostCreationEventArgs(); targetReport.PostCreationAction(re); if (re.FileNames.Count > 0) { foreach (var file in re.FileNames) { System.Diagnostics.Process.Start(file); } } } } catch (ThreadAbortException) { messenger.AddMessage("Прервано пользователем.", ErrorsTypes.important); } catch (EmptyReportParameterException ex) { messenger.AddMessage(ex.Message, ex, ErrorsTypes.critical); } catch (ApplicationException ex) { messenger.AddMessage(ex.Message, ex, ErrorsTypes.critical); } catch (System.Runtime.InteropServices.COMException ex) { messenger.AddMessage("В процессе вывода информации произошло неизвестное исключение " + ex.GetType().FullName + ":\n" + ex.Message.Replace('\r', '\n'), ex, ErrorsTypes.critical); } catch (Exception ex) { messenger.AddMessage("В процессе формирования отчета возникла непредвиденная ошибка:\n" + ex.Message + "\nФормирование отчета прервано.", ex, ErrorsTypes.critical); } finally { this.SetProgressInfo(new ProgressInfo(-1, "")); reportCreationThread = null; } | | Всего записей: 7 | Зарегистр. 04-05-2009 | Отправлено: 10:33 11-01-2010 | Исправлено: sfxhorse, 10:36 11-01-2010 |
|