Отдельная функция формирует файл (в рассматриваемом случае документ 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;
}