LiberOffice после использования не выключает свои процессы

Использую библиотеки LiberOffice для создания и работы с документом (Замена текста), все работает, но при окончании работ в процессах остаются висеть два процесса Либры, а именно: soffice.exe и soffice.bin.

  • Их расположение: C:\Program Files\LibreOffice\program

Проблема заключается в том, что когда эти процессы висят - не получается открыть оснастку (саму либру), начинает мигать(Появляться/исчезать 3 раза в секунду) баннер запуска LiberOffice. Но если процессы явно выключить(убить) то Либра спокойно запускается. Аналогична обратная вторая проблема, когда на устройстве включен LiberOffice - программная функция по работе с документами LiberOffice не срабатывает.

введите сюда описание изображения

Пример кода, подключение:

private XMultiServiceFactory connect()
    {
        var componentContext = uno.util.Bootstrap.bootstrap();
        return (XMultiServiceFactory) componentContext.getServiceManager();
    }

Получить документ по адресу:

private unoidl.com.sun.star.text.XTextDocument initDocumentCreate(unoidl.com.sun.star.lang.XMultiServiceFactory factory)
    {
        try
        {
            XComponentLoader loader = (XComponentLoader)
                factory.createInstance("com.sun.star.frame.Desktop");
            
            var urlPath = "Тут урл до файла odt";
            
            XComponent component = loader.loadComponentFromURL(
                urlPath, "_default", 0,
                new unoidl.com.sun.star.beans.PropertyValue[0]);
            
            return (unoidl.com.sun.star.text.XTextDocument) component;
        }
        catch {
            throw new System.Exception("Сообщение об ошибке");
        }
        
    }

Работа с документом:

{
        try
        {
            var factory = connect();
            var document = initDocument(factory);
            /*Код-код-код*/
            CloseLibraProc(document);
            /*Код-код-код*/
            return doc;
        }
        catch (System.Exception e)
        {
            throw;
        }
        finally 
        {
            GC.Collect();
            GC.SuppressFinalize(this);
        }
    }

Вот так обрабатываю закрытие:

private void CloseLibraProc(unoidl.com.sun.star.text.XTextDocument document)
    {
        try
        {
            var store = (XStorable) document;
            store.store();
            
            var close = (unoidl.com.sun.star.util.XCloseable) document;
            
            if (close != null )
                close.close(false);
            else
            {
                var component = (XComponent) document;
                component.dispose();
            }
        }
        catch
        {
            throw new System.Exception("Ошибка при закрытии или сохранении");
        }
    }

Возможно функция закрытия не совсем корректная и чего-то не хватает?


Ответы (0 шт):