Приложение отчёта

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Автор
    Сообщения
  • #18075
    vg
    Участник

    Здравствуйте!

    Написал на C# приложение, которое формирует отчёт в Word-файл, а точнее даже 2 Word-файла (в процессе используется Excel), с помощью библиотек Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel.

    Запускаю его по нажатию графического элемента в веб-интерфейсе через команду управления с помощью System.Diagnostics.Process.Start(«путь к файлу») и при этом запущен ScadaServerMono.exe (обычная служба сервера остановлена).

    Собственно на рабочем ПК, на котором разрабатывал приложение, всё работает. Но при переносе на тестовый сервер столкнулся с тем, что после первого выполнения документ Word остаётся открытым в службе ScadaCommService и повторный запуск приводит к тому, что процессы Word и Excel остаются висеть в диспетчере без какого либо результата. Удалить последний сформированный файл нельзя, так как он занят службой.

    Так как проблема обнаружена только на тестовой машине, есть вероятность, что отличаются какие то функции, отвечающие за работу служб.

    Подскажите пожалуйста куда копать.

    #18076
    vg
    Участник

    Обложил программу логами (консольное приложение, поэтому записываю в текстовый файл). Заработала работа отчётов, отвалилась Email-рассылка 🙂

    #18077
    vg
    Участник

    Сообщение о работе отчётов было преждевременным. Проблема осталась.

    #18078
    vg
    Участник

    Если я правильно рассуждаю, то необходимо настроить службы таким образом, чтобы они освобождали используемые файлы после отработки приложения.

    #18079
    vg
    Участник

    Проблема 100% заключается в том, что при попытке сохранить последний из 2-х Word-файлов остаётся открытым службой ScadaServiceComm. Из-за этого при повторном запуске приложения файл не может быть перезаписан (используется одно название для 2-го файла и перезаписывается) и приложение обваливается.

    Правда пока не понял как освободить этот файл из плена службы.

    #18083
    Mikhail
    Модератор

    Добрый день!

    Если Word или Excel используются для формирования отчётов через технологию DCOM, то это весьма плохо работает с сервисами. Лучше бы использовать библиотеки, которые умеют формировать отчёты без запуска офисных приложений.

    В данном случае нужно отвязать Rapid SCADA от приложения, формирующего отчёты. Например, отправляйте команду на формирование отчёта в виде записи в БД или в виде простого текстового файла. Ваша программа должна ожидать команды и при её получении формировать отчёт.

    #18084
    vg
    Участник

    Спасибо!

    #18087
    Mikhail
    Модератор

    Также можно стартовать новый процесс без блокировки текущего:

    pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe");
    pInfo.UseShellExecute = false;
    
    // Start process
    mProcess = new Process();
    mProcess.StartInfo = pInfo;
    if (mProcess.Start() == false) {
        Trace.TraceError("Unable to run process {0}.");
    }

    Взято отсюда. Но если Сервер работает как служба, то он не имеет доступа к рабочему столу обычного пользователя и Word/Excel работать не смогут.

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Вы должны авторизироваться для ответа в этой теме.