Процедура РаспаковатьФайлВнешнейОбработки(ПолноеИмяФайла, ПутьРаспаковки) Экспорт
//ПроверитьСоздатьФайлЗапаковщика1С();
Разделитель = ирОбщий.РазделительПутиКФайлуЛкс();
ПодготовитьПакер(ПутьРаспаковки);
ИмяФайлаЛога = "unpack.log";
Если Истина
//И Ложь // Для отладки
И ирКэш.ЛиПлатформаWindowsЛкс()
Тогда
ИмяКомандногоФайла = "unpack.bat";
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст("
|" + ИмяФайлаПакера + " -unpack %1 .\
|FOR %%I IN (*.data) DO " + ИмяФайлаПакера + " -undeflate %%I %%~nI.data.und
|FOR %%I IN (*.und) DO " + ИмяФайлаПакера + " -unpack %%I %%~nI.und.unp
|");
ПолноеИмяКомандногоФайла = ПутьРаспаковки + Разделитель + ИмяКомандногоФайла;
ТекстовыйДокумент.Записать(ПолноеИмяКомандногоФайла, КодировкаТекста.ANSI);
ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ИмяКомандногоФайла + " """ + ПолноеИмяФайла + """", ПутьРаспаковки,, ИмяФайлаЛога);
Иначе
// Под Windows этот способ медленнее в 5 раз
// У версии под Linux немного отличаются параметры запуска по сравнению с Windows
https://github.com/e8tools/v8unpack //СДВ(
//Было:
//ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс("./" + ИмяФайлаПакера + " -U """ + ПолноеИмяФайла + """ ./", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
//Стало:
ПолноеИмяПакера = ПутьРаспаковки + ИмяФайлаПакера;
ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ПолноеИмяПакера + " -U """ + ПолноеИмяФайла + """ ./", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
//СДВ)
Для Каждого Файл Из НайтиФайлы(ПутьРаспаковки, "*.data") Цикл
#Если Сервер И Не Сервер Тогда
Файл = Новый Файл;
#КонецЕсли
// Можно наверное ускорить созданием командного файла
//СДВ(
//Было:
//ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс("./" + ИмяФайлаПакера + " -D " + Файл.Имя + " " + Файл.Имя + ".und", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
//ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс("./" + ИмяФайлаПакера + " -U " + Файл.Имя + ".und " + Файл.Имя + ".und.unp", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
//Стало:
ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ПолноеИмяПакера + " -D " + Файл.Имя + " " + Файл.Имя + ".und", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ПолноеИмяПакера + " -U " + Файл.Имя + ".und " + Файл.Имя + ".und.unp", ПутьРаспаковки,, ИмяФайлаЛога,,, Истина);
//СДВ)
КонецЦикла;
КонецЕсли;
ЧитатьЛог = Ложь; // Для отладки
Если ЧитатьЛог Тогда
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПутьРаспаковки + Разделитель + ИмяФайлаЛога, ирОбщий.СистемнаяКодировкаТекстаОСЛкс());
ТекстЛога = ТекстовыйДокумент.ПолучитьТекст();
КонецЕсли;
УдалитьФайлы(ИмяФайлаЛога);
КонецПроцедуры