diff --git a/packagedef b/packagedef index f9af18e..c6711b9 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@  Описание.Имя("1commands") - .Версия("1.4.0") + .Версия("1.5.0") .ВерсияСреды("1.0.17") .ЗависитОт("logos") .ЗависитОт("asserts") diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" index dd15088..a0b85f2 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\260.os" @@ -17,7 +17,7 @@ Перем МинимальныйОжидаемыйКодВозврата; Перем МаксимальныйОжидаемыйКодВозврата; Перем ПериодОпросаВМиллисекундах; -Перем НемедленнныйВывод; +Перем НемедленныйВывод; Перем ПодключенныеЛоги; Перем ОбработчикОжиданияПроцесса; Перем ДополнительныеПараметрыОбработчика; @@ -128,7 +128,7 @@ // Добавить параметр команды. // // Параметры: -// Строка - новый единичный параметр или все параметы в одной строке +// Строка - новый единичный параметр или все параметры в одной строке // Процедура ДобавитьПараметр(Знач Параметр) Экспорт Параметры.Добавить(Параметр); @@ -149,7 +149,7 @@ // Может использовать для очистки параметров. Для этого нужно передать пустую строку // // Параметры: -// Строка - параметы в одной строке +// Строка - параметры в одной строке // Процедура УстановитьПараметры(Знач СтрокаПараметров) Экспорт Параметры = Новый Массив; @@ -186,12 +186,12 @@ // Управляет мгновенным выводом лога команды // // Параметры: -// НемедленныйПоказ - Булевое +// НемедленныйПоказ - Булево // Ложь: показывает вывод только после завершения выполнения команды // Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды // Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт - НемедленнныйВывод = НемедленныйПоказ; + НемедленныйВывод = НемедленныйПоказ; КонецПроцедуры // Устанавливает передачу вывода команды в дополнительный лог @@ -217,7 +217,8 @@ // ППериодОпросаВМиллисекундах - Число - период вызова обработчика ожидания, мс (по умолчанию 5000) // ДополнительныеПараметры - Структура - дополнительные параметры передаваемые в обработчик ожидания // -Процедура УстановитьОбработчикОжидания(Обработчик, Знач ППериодОпросаВМиллисекундах = 5000, ДополнительныеПараметры = Неопределено) Экспорт +Процедура УстановитьОбработчикОжидания(Обработчик, Знач ППериодОпросаВМиллисекундах = 5000, + ДополнительныеПараметры = Неопределено) Экспорт ОбработчикОжиданияПроцесса = Обработчик; ПериодОпросаВМиллисекундах = ППериодОпросаВМиллисекундах; @@ -389,20 +390,41 @@ Попытка Если КодировкаВывода = Неопределено Тогда - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСредыПроцесса); + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, , + ПеременныеСредыПроцесса); Иначе - Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСредыПроцесса); + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, + КодировкаВывода, ПеременныеСредыПроцесса); КонецЕсли; - - Исключение - - Инфо = ИнформацияОбОшибке(); - - ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); + Исключение + + Инфо = ИнформацияОбОшибке(); + + // TODO код проверки на регулярку (ниже) убрать после исправления в движке OneScript + РегуляркаОшибкиПеременныхСреды = Новый РегулярноеВыражение( + "\(System\.ArgumentException\):[^:]+:.*HOME[^:]+:.*home"); + Если РегуляркаОшибкиПеременныхСреды.Совпадает(Инфо.Описание) Тогда + Лог.Предупреждение("Возникла ошибка, связанная с переменными среды при старте нового процесса + |%1 + | + |Выполняю старт процесса без указания переменных среды.", Инфо.Описание); + + Лог.Отладка("Полное описание ошибки: + |%1", Инфо.ПодробноеОписаниеОшибки()); + + Если КодировкаВывода = Неопределено Тогда + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки); + Иначе + Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, ПерехватыватьПотоки, ПерехватыватьПотоки, + КодировкаВывода); + КонецЕсли; + Иначе + ВызватьИсключение Инфо.ПодробноеОписаниеОшибки(); + КонецЕсли; КонецПопытки; - + Процесс.Запустить(); Возврат Процесс; @@ -505,7 +527,7 @@ Если ПериодОпросаВМиллисекундах <> 0 Тогда Приостановить(ПериодОпросаВМиллисекундах); - ОбработкаОжиданияПроцесса(Процесс, ЗаписьXML) + ОбработкаОжиданияПроцесса(Процесс, ЗаписьXML); КонецЕсли; Пока НЕ Процесс.Завершен Цикл @@ -514,7 +536,7 @@ Приостановить(ПериодОпросаВМиллисекундах); КонецЕсли; - ОбработкаОжиданияПроцесса(Процесс, ЗаписьXML) + ОбработкаОжиданияПроцесса(Процесс, ЗаписьXML); КонецЦикла; @@ -529,7 +551,7 @@ КонецЕсли; РезультатРаботыПроцесса = ЗаписьXML.Закрыть(); - // Если Не НемедленнныйВывод Тогда + // Если Не НемедленныйВывод Тогда // Лог.Отладка("РезультатРаботыПроцесса %2-----%2%1%2------%2", РезультатРаботыПроцесса, Символы.ПС); // КонецЕсли; @@ -558,7 +580,7 @@ Иначе ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС); - Если НемедленнныйВывод Тогда + Если НемедленныйВывод Тогда Сообщить(Рез); КонецЕсли; КонецЕсли; @@ -572,7 +594,8 @@ Если ПроверяемКодВозврата Тогда Если КодВозврата < МинимальныйОжидаемыйКодВозврата или КодВозврата > МаксимальныйОжидаемыйКодВозврата Тогда Если МинимальныйОжидаемыйКодВозврата <> МаксимальныйОжидаемыйКодВозврата Тогда - ТекстОшибки = СтрШаблон("Ожидали, что код возврата <%1> команды <%2> совпадет с ожидаемым диапазоном <%3>-<%4>, а это не так! + ТекстОшибки = СтрШаблон( + "Ожидали, что код возврата <%1> команды <%2> совпадет с ожидаемым диапазоном <%3>-<%4>, а это не так! |Лог команды: |%5", КодВозврата, Приложение, МинимальныйОжидаемыйКодВозврата, МаксимальныйОжидаемыйКодВозврата, @@ -613,7 +636,7 @@ ПерехватыватьПотоки = Истина; ПериодОпросаВМиллисекундах = 100; - НемедленнныйВывод = Ложь; + НемедленныйВывод = Ложь; ПеременныеСредыПроцесса = ПеременныеСреды(); diff --git "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" index 46d74ba..ffee956 100644 --- "a/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" +++ "b/src/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.os" @@ -11,7 +11,7 @@ Перем ЭтоWindows; Перем Лог; -Перем НемедленнныйВывод; +Перем НемедленныйВывод; Перем КодировкаВывода; // Получить имя лога продукта @@ -143,7 +143,7 @@ Команда = Новый Команда; Команда.УстановитьКодировкуВывода(КодировкаВывода); - Команда.ПоказыватьВыводНемедленно(НемедленнныйВывод); + Команда.ПоказыватьВыводНемедленно(НемедленныйВывод); Если ЗначениеЗаполнено(Приложение) Тогда СтрокаЗапуска = """%1"""; @@ -191,12 +191,12 @@ // Управляет мгновенным выводом лога команды // // Параметры: -// НемедленныйПоказ - Булевое +// НемедленныйПоказ - Булево // Ложь: показывает вывод только после завершения выполнения команды // Истина: показ вывода выполняется почти сразу, после появления очередной порции сообщений от команды // Процедура ПоказыватьВыводНемедленно(Знач НемедленныйПоказ) Экспорт - НемедленнныйВывод = НемедленныйПоказ; + НемедленныйВывод = НемедленныйПоказ; КонецПроцедуры // Получить строку перенаправления ввода-вывода "> файл" @@ -243,7 +243,7 @@ ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; ТекстФайла = ""; - НемедленнныйВывод = Ложь; + НемедленныйВывод = Ложь; КодировкаВывода = КодировкаТекста.OEM; Создать();