Не запускается приложение LO при использовании CLI библиотек

Автор Борис_С, 25 января 2022, 17:32

0 Пользователи и 1 гость просматривают эту тему.

Борис_С

Всем доброго дня.
Разработал приложение на С#, в котором осуществляется запуск приложения Open Office, используя библиотеки CLI.
Вот код:

public override bool OpenFile(string fileName)
       {
           try
           {
               XComponentContext localContext = uno.util.Bootstrap.bootstrap();
               multiServiceFactory = (XMultiServiceFactory)localContext.getServiceManager();
             
               componentLoader =
                   (XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
               string fileNameURL = @"file:///" + fileName.Replace('\\', '/');
               this.fileName = fileName;
               PropertyValue[] values = new PropertyValue[1];
               values[0] = new PropertyValue();
               values[0].Name = "Hidden";
               //values[0].Value = new uno.Any(true); // запуск в слепом режиме
               values[0].Value = new uno.Any(false); // запуск в режиме отображения

               //Открываю документ
               xComponent = componentLoader.loadComponentFromURL(
                   fileNameURL, "_blank", 0, values);    
                         
               return true;
           }
           catch (System.Exception e)
           {
               string message =  String.Format("Ошибка открытия файла.\n{0}\n{1}",
                       e.Message, e.StackTrace.TrimStart());
               Debug.WriteLine(message);              
               return false;
           }
       }

У меня на компе установлены LibreOffice версии 7.2.5 и OpenOffice версии 4.1.11
При работе этого модуля запускалась OpenOffice.
Решил проверить, что будет, если удалить с компа OpenOffice. Ожидал, что будет стартовать LibreOffice.
В реальности происходит исключение на операторе
XComponentContext localContext = uno.util.Bootstrap.bootstrap();
Где я не прав? Буду благодарен за любую помощь.

И еще такой вопрос. Какие библиотеки CLI нужно подгружать к проекту.
Я подгружаю библиотеки CLI OpenOffice.
Попробовал подгрузить библиотеки CLI LibreOffice. При этом при старте программы получаю такое сообщение:

mikekaganski

Инсталлятор удалил регистрацию своих библиотек из системы, а не настроил регистрацию других. Попробуйте переустановить или восстановить ЛО.
С уважением,
Михаил Каганский

Борис_С

Я поставил новую версию LibreOffice и сделал перезагрузку. Этого достаточно?

mikekaganski

С уважением,
Михаил Каганский

Борис_С

Не помогает. Все равно исключение на 1-ом операторе.

Борис_С


Борис_С

При сборке приложения получаю такое предупреждение:

There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "cli_cppuhelper, Version=1.0.23.0, Culture=neutral, PublicKeyToken=ce2cb7e279207b9e, processorArchitecture=AMD64", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.

Грубо говоря, это несоответствие между параметрами библиотеки cli_cppuhelper.dll и параметрами проекта.
Я не очень понимаю, какие параметры проекта мне нужно поменять.
Буду благодарен за любую помощь.

Борис_С


mikekaganski

#8
Цитата: Борис_С от 27 января 2022, 13:15
Получилось. Нужно установить Platform Target: x64

Ну так у Вас не будет работать с AOO и если в системе установлен 32-разрядный ЛО.
А нельзя вместо Target: x64 выбрать AnyCPU?

Хотя нет, AnyCPU ничего не изменит.
С уважением,
Михаил Каганский

Борис_С

У меня и было в настройках Any CPU. При этом возникало исключение.
Есть ли здесь корректный вариант для ЛО и ОО?

mikekaganski

Нет. Оно могло бы работать только если ЛО поставлял библиотеки AnyCPU. Но это не так.
С уважением,
Михаил Каганский

Борис_С

#11
Может стоит им об этом написать?
Они реагируют на такие просьбы?

Борис_С

Из какой программы лучше брать CLI библиотеки? Из ЛО или из ОО или это не имеет значения?

mikekaganski

Цитата: Борис_С от 27 января 2022, 14:57
Может стоит им об этом написать?

Написать стоит. А на скорую реакцию рассчитывать не стоит.
И для того чтобы это исправить, потребовался бы двойной набор практически всех нативных библиотек ЛО - то есть нужно было бы увеличивать размер дистрибутива раза в полтора. Потому что библиотеки cli грузят библиотеки ЛО (ЛО не работает в отдельном процессе), и значит, архитектура нативных библиотек должна соответствовать запускаемому приложению. Вряд ли это можно будет просто исправить. Надо разрабатывать программу либо под 64-разрядный ЛО, либо под 32-разрядные ЛО и AOO. Универсального решения не получится.
С уважением,
Михаил Каганский

Борис_С

Обнаружил интересную вещь. Если в настройках проекта Platform Target = x64, стартует ЛО,
Если Platform Target = Any CPU или x86, стартует ОО.