Добрый день.
Стоит задача распаковать архив 7z с файлами и содержимое файлов записать в соответствующие таблицы BPMOnline 7.8
Казалось бы тривиальная задача, но всё осложняется тем, что продуктивная среда клиента развёрнута на on-demand и соответственно к файловой системе сервера доступа нет. Можно было бы воспользоваться вкладкой "Внешние сборки", но библиотека 7zip.dll написана на С++ и её подключить не представляется возможным, т.к. можно добавлять только dll-ки, написанные на C#.

Может кто сталкивался с такой задачей, а именно распаковка архива с несколькими файлами из потока?

Сам я смотрю в сторону библиотеки SevenZipSharp, а точнее класса SevenZip.Compression.LZMA.Decoder и SevenZipHelper.cs. Но пока при выполнении метода SevenZipHelper.Decompress(byteArray) получаю ошибку Data Error на шаге
decoder.Code(newInStream, newOutStream, compressedSize, outSize, null);

Буду очень благодарен за помощь. Спасибо

Нравится

7 комментариев

Здравствуйте, Игорь!

Если Вам необходимо добавить какие-либо библиотеки на облачный сервер, это можно сделать, обратившись в техническую поддержку с данной просьбой.

Что касается самого вопроса, уточните, как файлы будут попадать в систему?

Загружаться по ссылке в поток.

При попытке загрузить библиотеку 7z.dll из файловой системы BPMOnline выдаёт следующую ошибку:

Инициализатор типа "SevenZip.SevenZipLibraryManager" выдал исключение. ---> System.ArgumentException: Путь имеет недопустимую форму.

Библиотека лежит в Terrasoft.WebApp/bin/. Доступы к библиотеке для пользователя IIS_IUSRS открыт. Как мне получить доступ к dll-файлам из файловой системы?

В VisualStudio всё хорошо. Ошибка возникает только в BPMOnlline.

Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.

Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.

"Александр Зубков" написал:Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.

Да, Александр, об этом я и писал в топике этой темы.

"Александр Зубков" написал:Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.

В том то и дело, что если использовать чистый проект в visual Studio, то всё прекрасно работает, проблема возникает при переносе кода в "Исходный код" BpmOnline.

Вопрос остаётся открытый. Как распаковать из BPMOnline архив 7Zip?
Вариант распаковки в каталог также не работает

 var processStartInfo = new ProcessStartInfo();
 processStartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe";
 processStartInfo.Arguments = @"e C:\test.7z";
 Process.Start(processStartInfo);

Возможно, что сайт, который находится в облаке не понимаем локальный путь @"C:\Program Files\7-Zip\7z.exe"

В данном случае нужно разворачивать локально сайт и проводить отладку - https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/otladka-server…

Показать все комментарии